我正在尝试使以下工作。
我有一个表格视图,它在表格视图中显示从 API 获取的数据。为此,我正在使用 NSFetchedResultsController:
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:self.database.managedObjectContext
sectionNameKeyPath:nil
cacheName:nil];
我在这样的背景上下文中创建我的实体:
NSManagedObjectContext *backgroundContext;
backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
backgroundContext.parentContext = document.managedObjectContext;
[backgroundContext performBlock:^{
[MyAPI createEntitiesInContext:backgroundContext];
NSError *error = nil;
[backgroundContext save:&error];
if (error) NSLog(@"error: %@",error.localizedDescription);
[document.managedObjectContext performBlock:^{
[document updateChangeCount:UIDocumentChangeDone];
[document.managedObjectContext save:nil];
}];
现在,每当我获得新数据(以及如上所示的插入/更新实体)时,我的 NSFetchedResultsController 就无法正常工作。特别是,我总是更新一个实体(而不是创建一个新实体),但我的表格视图显示了两个实体。一旦我重新启动应用程序,它就会正确显示。
如果我在 self.database.managedObjectContext 中创建实体([MyAPI createEntities]),一切正常。
知道我做错了什么吗?浏览 SO 上的现有线程让我认为我的做法是正确的。同样,如果我不在后台上下文中保存核心数据(但在 document.managedObjectContext 上),那么它可以正常工作......