我怎样才能/应该为所有实体和密钥注册KVO观察者,无论其类型如何?
这样做的目的是监视对象的更改并将其标记为已修改,以便我可以通过JSON API和Web服务提供同步功能。
另外,如果我做错了,那么正确的方法是什么?
编辑:并不是说这将在生产代码中使用,我宁愿不冒险使用不成熟的库。
答案 0 :(得分:2)
NSManagedObjectContextObjectsDidChangeNotification
是你的朋友。
此通知每次运行循环迭代发布一次,并包含已更改/插入/删除/合并的所有内容的字典。
要注意的两件事:
如果你正在进行奇特的线程/操作队列技巧,你可能必须在某些情况下手动调用processPendingChanges,如果这个通知似乎没有按预期发布。通常,CD会在需要时自动将其安排在当前运行循环中。
当您注册此通知时,请具体说明您想要收听哪个托管对象上下文(不要只传递nil。)内部框架私下使用Core Data,此通知可能会被您没有的上下文发布期望的。
答案 1 :(得分:1)
我会看看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]];`