Iphone CoreData注册所有对象和键的全局观察者

Iphone CoreData注册所有对象和键的全局观察者,iphone,ios,core-data,key-value-observing,Iphone,Ios,Core Data,Key Value Observing,我如何/应该为所有实体和密钥注册KVO观察器,无论其类型如何 这样做的目的是监视对对象的更改并将其标记为已修改,以便我可以通过JSONAPI和web服务提供同步功能 还有,如果我做错了,正确的方法是什么 编辑:这不会在生产代码中使用,我也不想冒险使用一个不成熟的库。我会看看RestKit,特别是RKObjectMapper和RKObjectManager类,因为它允许KVC对象映射 RKObjectManager* manager = [RKObjectManager managerWithBa

我如何/应该为所有实体和密钥注册KVO观察器,无论其类型如何

这样做的目的是监视对对象的更改并将其标记为已修改,以便我可以通过JSONAPI和web服务提供同步功能

还有,如果我做错了,正确的方法是什么


编辑:这不会在生产代码中使用,我也不想冒险使用一个不成熟的库。

我会看看RestKit,特别是RKObjectMapper和RKObjectManager类,因为它允许KVC对象映射

RKObjectManager* manager = [RKObjectManager managerWithBaseURL:myBaseURL];
RKObjectMapping* articleMapping = [RKObjectMapping mappingForClass:[Article class]];
[mapping mapAttributes:@"title", @"body", @"publishedAt", nil];
[manager.mappingProvider setObjectMapping:articleMapping forKeyPath:@"article"];

// Generate an inverse mapping for transforming Article -> NSMutableDictionary. 
[manager.mappingProvider setSerializationMapping:[articleMapping inverseMapping] forClass:[Article class]];`

我将介绍RestKit,特别是RKObjectMapper和RKObjectManager类,因为它允许KVC对象映射

RKObjectManager* manager = [RKObjectManager managerWithBaseURL:myBaseURL];
RKObjectMapping* articleMapping = [RKObjectMapping mappingForClass:[Article class]];
[mapping mapAttributes:@"title", @"body", @"publishedAt", nil];
[manager.mappingProvider setObjectMapping:articleMapping forKeyPath:@"article"];

// Generate an inverse mapping for transforming Article -> NSMutableDictionary. 
[manager.mappingProvider setSerializationMapping:[articleMapping inverseMapping] forClass:[Article class]];`

nsmanagedObjectContextObjectsIDChangeNotification
是您的朋友

此通知在每次运行循环迭代中发布一次,并包含已更改/插入/删除/合并的所有内容的字典

要注意两件事:

如果您正在使用奇特的线程/操作队列技巧,在某些情况下,如果此通知似乎没有在您期望的时候发布,您可能必须手动调用processPendingChanges。通常,CD会在需要时自动将其安排在当前运行循环中


当您注册此通知时,请具体说明您希望从哪个托管对象上下文中听到(不要只传递nil)。内部框架私下使用核心数据,并且此通知可能会通过您不期望的上下文发布。

NSManagedObjectContextObjectsIDChangeNotification
是您的朋友

此通知在每次运行循环迭代中发布一次,并包含已更改/插入/删除/合并的所有内容的字典

要注意两件事:

如果您正在使用奇特的线程/操作队列技巧,在某些情况下,如果此通知似乎没有在您期望的时候发布,您可能必须手动调用processPendingChanges。通常,CD会在需要时自动将其安排在当前运行循环中


当您注册此通知时,请具体说明您希望从哪个托管对象上下文中听到(不要只传递零)。内部框架私下使用核心数据,此通知可能会通过您不期望的上下文发布。

这看起来确实不错,但它的版本是0.10,我想在生产代码中使用它,所以这让我很紧张。不过,还是要感谢+1,因为它确实回答了问题ASI不再受支持(以前的标准),而且我与一家公司签订的合同在生产环境中使用RestKit。它工作得很好。这看起来确实不错,但它的版本是0.10,我想在生产代码中使用它,所以这让我很紧张。不过,还是要感谢+1,因为它确实回答了问题ASI不再受支持(以前的标准),而且我与一家公司签订的合同在生产环境中使用RestKit。它工作得很好。