0

无论类型如何,我如何/应该为所有实体和键注册 KVO 观察者?

这样做的目的是监视对象的更改并将它们标记为已修改,以便我可以通过 JSON API 和 Web 服务提供同步功能。

另外,如果我做错了,正确的方法是什么?

编辑:并不是说这将用于生产代码,我宁愿不冒险使用不成熟的库。

4

2 回答 2

2

NSManagedObjectContextObjectsDidChangeNotification是你的朋友。

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

需要注意两点:

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

当您注册此通知时,请具体说明您想从哪个托管对象上下文(不要只传递 nil)。内部框架私下使用 Core Data,并且此通知可能会由您不期望的上下文发布。

于 2012-05-15T02:57:55.370 回答
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]];`
于 2012-05-14T17:35:40.357 回答