【发布时间】:2012-11-19 16:14:20
【问题描述】:
我有一个奇怪的问题。我没有在我的 NSManagedObject 上获得“更新”操作的回调,但是在该实体类型的集合中插入或删除的任何对象都会触发委托回调。
在我进一步回答这个问题之前,我想告知我的设置:
-
NSFetchedResultsController 配置正确。确保 正在外部修改的属性不是任何 此 Apple 要求的 fetchedResultsController 的排序键 文档:
当一个对象的状态改变时报告一个更新,但是改变的 属性不是排序键的一部分。
只有一个托管对象上下文会发生这些修改。
由于插入和删除操作正在报告给 代表,我认为更新有些可疑 操作
我在 RKLogs 的帮助下深入研究了 Restkit 代码,以查看映射发生的确切位置以及 coredata 对象正在更新的位置,以找出未获得更新委托回调的原因。
在 RKManagedObjectMappingOperation 类 -performMapping 方法中,Blake Watters 先生记录了更新时未触发 MOC 回调的原因:
- (BOOL)performMapping:(NSError **)error
{
BOOL success = [super performMapping:error];
if ([self.objectMapping isKindOfClass:[RKManagedObjectMapping class]]) {
/**
NOTE: Processing the pending changes here ensures that the managed object context generates observable
callbacks that are important for maintaining any sort of cache that is consistent within a single
object mapping operation. As the MOC is only saved when the aggregate operation is processed, we must
manually invoke processPendingChanges to prevent recreating objects with the same primary key.
See https://github.com/RestKit/RestKit/issues/661
*/
[self connectRelationships];
}
return success;
}
但我终其一生都无法弄清楚如何解决这个问题?因为这是故意的?
有人遇到过同样的问题吗?我该如何解决?
谢谢, 拉吉帕万
【问题讨论】:
标签: iphone ios cocoa-touch core-data restkit