【发布时间】:2015-02-24 17:03:18
【问题描述】:
我正在尝试使用 KVO 观察者实现 dateModified 更新,如下所示
https://github.com/dvidsilva/everpobre/blob/master/coreData/DVDNoteModel.m
但问题是,当 RESTKit 从服务器获取数据并将其本地存储在 CoreData 中时,它也会被调用,这是我不想要的。
我需要避免仅为 RESTKit 调用触发 KVO 观察者,因此当 RESTKit 从服务器获取数据时,它一定不能使用 dataModified 进行更新。
此外,我发现 RESTKit 调用是从 [RKResponseMapperOperation main] 发起的,因此使用 [NSThread callStackSymbols] 虽然我能够成功跟踪并执行它,但此解决方案仅适用于 Build 版本(安装在设备上)但是对于发布版本 [NSThread callStackSymbols] 没有返回相同的符号,导致 RESTKit 调用未被跟踪。
我无法跟踪当前调用是 RESTKit 还是我自己的。
Is there a way to track if current Thread call is from RESTKit?
or
Is there a way we could track it using RESTKit NSManagedObjectContext or so?
or any other possible solution?
如果您有任何可能的提示,请回答。
谢谢。
【问题讨论】:
-
在 ManagedObjectContext save: 方法上使用 lldb 和符号断点,以及您的方法调用并尝试找出答案。
-
我尝试使用 [NSThread callStackSymbols] 和跟踪 [RKResponseMapperOperation main] 进行此操作,但这不适用于发布版本。任何建议
-
你的终极目标是什么?但是,您进行更改时,它们将始终向上传播到上下文层次结构并导致更改通知,这是 Core Data 工作方式的基础。一旦您离开后台上下文保存 RestKit,您就无法判断合并的来源。如果它来自后台线程,您可能会在合并期间获得将/已保存通知并禁用您的侦听器...
-
Wain,我实际上在等待你的输入,我的目标很简单,我想在我的每个 NSManagedObjects (使用 KVO Observers 左右)发生变化时继续修改“dateModified”,除了对于 RESTKit。一旦 RESTKit 为 RKEntityMapping 对象加载数据,它创建 NSManagedObjects 以持久保存在 coredata 中,同时执行 coredata 操作 RESTKit 将覆盖 KVO Observers 中的“dateModified”,用于来自服务器的所有 NSManagedObjects,这是我不想要的,必须有一些合适的解决方案识别 RESTKit 调用以避免该特定调用的 KVO 观察者。
标签: ios core-data restkit key-value-observing restkit-0.20