【问题标题】:iOS KVO and NSManagedObject - fine grained mechanism for detecting changesiOS KVO 和 NSManagedObject - 检测变化的细粒度机制
【发布时间】:2014-07-30 00:19:37
【问题描述】:

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

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

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

如果版本号不是定义的最后一个属性,那么当调用观察者时,版本之后属性的更新值将不会被应用。

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

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

这是正确的还是有办法在使用 KVO 时确保对象的非原子视图?

【问题讨论】:

    标签: core-data restkit key-value-observing


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,感谢回复和确认,将使用上下文通知进行测试,更改数量是后台进程的结果,取决于服务器和其他用户在其他设备上所做的更改,但应该相对较低音量。
    猜你喜欢
    • 2014-11-29
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多