如何注册一个KVO观察员所有实体和密钥,无论其类型?核心数据注册全球观察员的所有对象和密钥
这样做的目的是监视对象的更改并将它们标记为已修改,以便通过带有Web服务的JSON API提供同步功能。
另外,如果我做错了,什么是正确的方法?
编辑:不是说这将用于生产代码,我宁愿不冒险使用不成熟的库。
如何注册一个KVO观察员所有实体和密钥,无论其类型?核心数据注册全球观察员的所有对象和密钥
这样做的目的是监视对象的更改并将它们标记为已修改,以便通过带有Web服务的JSON API提供同步功能。
另外,如果我做错了,什么是正确的方法?
编辑:不是说这将用于生产代码,我宁愿不冒险使用不成熟的库。
NSManagedObjectContextObjectsDidChangeNotification
是你的朋友。
此通知每次运行循环迭代一次,并包含所有已更改/插入/删除/合并的字典。
两件事情要提防:
如果你正在做的花式线/操作队列技巧,你可能要在某些情况下,手动调用processPendingChanges如果该通知似乎并没有被发布,当你希望它。通常CD在需要时自动安排在当前运行循环中。
当您注册此通知时,请具体说明您希望从哪个受管对象上下文听到(不仅仅是传递零)。内部框架私下使用Core Data,并且此通知可能会被上下文发布,没想到。
我会看看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.10,我想在生产代码中使用它,所以它让我感到紧张。不过谢谢+1,因为它确实回答了问题 –
ASI不再受支持(以前的标准),而我与之签约的公司在生产环境中使用RestKit。它运作良好。 – Eric