避免志愿Obervers为RESTKit要求

问题描述:

我米试图实现使用KVO观察员dateModified更新用如下所示避免志愿Obervers为RESTKit要求

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? 

如果您有任何可能的提示,请回答。

谢谢。

+1

在ManagedObjectContext save:method和您的方法调用上使用lldb和符号断点,并试图找出它。 – Sandeep 2015-02-24 17:19:31

+0

我尝试使用[NSThread callStackSymbols]和跟踪[RKResponseMapperOperation main]来执行此操作,但这对于发布版本不起作用。任何暗示 – 2015-02-24 17:34:10

+0

您的最终目标是什么?但是,如果进行更改,它们将始终传播到上下文层次结构并产生更改通知,这是Core Data工作原理的基础。一旦离开了后台上下文并保存了RestKit,你就无法知道合并的起源。你可能会得到意志/保存通知,并禁止你的听众在合并期间,如果它是从后台线程... – Wain 2015-02-24 22:17:25

您可以使用RKEntityMappingmodificationKey完成此操作。但有一些要求:

  1. 它只适用于一个单一的关键。这可能是一个修改日期,散列等等。当对象的其他部分发生变化时,任何东西都会改变。
  2. 您的JSON还必须包含此密钥。

如果您有这两个,RestKit将检查目标对象的修改键是否与JSON匹配。如果它不会发生修改并且不会触发KVO。

+0

感谢帕特里克,我有dateModified这是改变时,对象的变化和JSON也包含dateModified中,所以这两个要求都遵循,请让我知道我可以如何使它RKEntityMapping的modificationKey实现我所需的要求 – 2015-03-06 08:12:57

+0

只需将修改键设置为dateModified。 – 2015-03-09 21:26:43