2012-05-14 60 views
0

如何注册一个KVO观察员所有实体和密钥,无论其类型?核心数据注册全球观察员的所有对象和密钥

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

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

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

回答

2

NSManagedObjectContextObjectsDidChangeNotification是你的朋友。

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

两件事情要提防:

如果你正在做的花式线/操作队列技巧,你可能要在某些情况下,手动调用processPendingChanges如果该通知似乎并没有被发布,当你希望它。通常CD在需要时自动安排在当前运行循环中。

当您注册此通知时,请具体说明您希望从哪个受管对象上下文听到(不仅仅是传递零)。内部框架私下使用Core Data,并且此通知可能会被上下文发布,没想到。

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]];` 
+0

这当然看起来不错,但它的版本是0.10,我想在生产代码中使用它,所以它让我感到紧张。不过谢谢+1,因为它确实回答了问题 –

+0

ASI不再受支持(以前的标准),而我与之签约的公司在生产环境中使用RestKit。它运作良好。 – Eric