我有一个后台进程使用Restkit从后端服务器接收并应用对Core Data实体的更改,这非常有效。所有实体都具有版本号属性,该属性在后端接受更改并发布新版本时进行更新。如果用户正在查看的实体已更改,我需要使用最新版本信息更新视图。
使用KVO观察当前实体的版本号,并且只要版本号是最后一个属性,当它发生更改时刷新视图就非常有效。
也就是说,'列顺序'很重要,属性更新是原子的。如果版本号是最后一个属性,则在调用观察者时,将应用对所有实体属性的所有更改。
如果版本号不是最后定义的属性,则在调用观察者时,将不会应用版本之后的属性的更新值。
解决方案是更改数据库并确保版本号始终是最后一个。这有效但我在文档中找不到任何可以保证属性更改顺序的保证。
我认为获得防水非原子通知的唯一方法是注册托管对象上下文更改通知,然后处理这些通知,查找感兴趣对象的更改。我对此的关注是,它不是细粒度的,并且会有很多不必要的处理来找到相对较少的感兴趣的东西。
这是正确的还是有办法确保在使用KVO时对象的非原子视图?
答案 0 :(得分:1)
如果您想使用KVO,则需要在顶部对更改管理进行分层,例如保存托管对象时,检查版本号并更改正在观察的另一个(非持久)属性。保存对象时,您可以确保在逻辑集中更新了所有内容。
通常,上下文保存通知是经过批准的方法。只要您不进行数千次更改或对上下文进行少量大量保存,就不应该成为问题。您还可以查看使用谓词来过滤更改和/或获取的结果控制器(为您进行观察)。