Core data iOS KVO和NSManagedObject—用于检测更改的细粒度机制

Core data iOS KVO和NSManagedObject—用于检测更改的细粒度机制,core-data,restkit,key-value-observing,Core Data,Restkit,Key Value Observing,我有一个后台进程,使用Restkit从后端服务器接收并应用对核心数据实体的更改,这非常有效。所有实体都有一个版本号属性,该属性在后端接受更改并发布新版本时更新。如果用户正在查看的实体发生更改,我需要使用最新版本信息更新视图 使用KVO观察当前实体的版本号,并在视图更改时刷新视图,只要版本号是最后一个属性,效果就非常好 也就是说,“列顺序”很重要,属性更新是原子的。如果版本号是最后一个属性,那么当调用观察者时,将应用对所有实体属性的所有更改 如果版本号不是定义的最后一个属性,则在调用观察者时,将不

我有一个后台进程,使用Restkit从后端服务器接收并应用对核心数据实体的更改,这非常有效。所有实体都有一个版本号属性,该属性在后端接受更改并发布新版本时更新。如果用户正在查看的实体发生更改,我需要使用最新版本信息更新视图

使用KVO观察当前实体的版本号,并在视图更改时刷新视图,只要版本号是最后一个属性,效果就非常好

也就是说,“列顺序”很重要,属性更新是原子的。如果版本号是最后一个属性,那么当调用观察者时,将应用对所有实体属性的所有更改

如果版本号不是定义的最后一个属性,则在调用观察者时,将不会应用版本后属性的更新值

解决方案是更改数据库并确保版本号始终是最后一个。这是可行的,但是我在文档中找不到任何东西表明属性更改的顺序是有保证的

我假设获得防水非原子通知的唯一方法是注册托管对象上下文更改通知,然后处理这些通知以查找对感兴趣对象的更改。我对这一点的担心是,它不是细粒度的,并且会有很多不必要的处理来找到相对较少的感兴趣的东西


这是正确的还是有一种方法可以确保在使用KVO时对象的非原子视图

如果要使用KVO,则需要在顶部分层一些更改管理,例如,在保存托管对象时,检查版本号并更改另一个正在观察的(非持久性)属性。保存对象时,可以确保逻辑集中的所有内容都已更新


通常,上下文保存通知是经批准的方法。只要您没有对上下文进行数千次更改或很少进行大型保存,就不应该成为问题。您还可以查看使用谓词过滤更改和/或获取结果控制器(为您进行观察)。

谢谢,感谢您的响应和确认,将使用上下文通知进行测试,更改的数量是后台进程的结果,取决于服务器&其他用户在其他设备上所做的更改,但数量应相对较低。