我面临一个奇怪的问题,一个NSFRC fetchedObjects数组返回的不是它应该的所有对象.为了给你一些上下文,我的应用程序有几个列表视图控制器,每个控制器都有一个NSFRC.我正在更新委托方法controllerDidChangeContent中的列表视图.我面临的问题是:在将对象存储在后台MOC并保存之后,调用controllerDidChangeContent但是我刚刚保存在后台线程中的对象没有出现在NSFRC中.这是我用来检查这个代码的一段代码:
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
NSManagedObjectContext *context = controller.managedObjectContext;
NSError *error = nil;
NSArray *array = [context executeFetchRequest:controller.fetchRequest error:&error];
if (nil != array) {
NSUInteger count = MIN(controller.fetchedObjects.count, array.count);
for (NSUInteger index=0; index<count; index++) {
NSManagedObject *a = array[index];
NSManagedObject *b = controller.fetchedObjects[index];
// Here you will see that sometimes the objects don't match
NSLog(@"%d: %@ <--> %@", index, [[a body] text], [[b body] text]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我期望NSFRC fetchedObjects数组与手动executeFetchRequest返回的数组相同(我使用NSFRC fetchRequest来手动获取数据).然而,这种情况并非如此.手动executeFetchRequest返回的对象多于NSFRC fetchedObjects.有谁知道发生了什么?我已经关闭了NSFRC上的缓存,但报告了相同的行为.
谢谢!
===更新====
关于该问题的一些更新.我认为Core Data中存在一个错误,因为我能够看到来自NSFRC的一些不一致的结果,而且能够通过涉及"触摸"有问题的对象的解决方法来解决问题.这是一个解释正在发生的事情的场景:
想象一下以下Core Data模型: - …