我正在使用 NSFetchedResultsController
结合 UIManagedDocument
在后台线程中更新。
我已经完全按照本教程中的描述设置了 NSFetchedResultsController:How To Use NSFetchedResultsController
我已设置委托(delegate) _fetchedResultsController.delegate = self
我的 View Controller 的协议(protocol)为NSFetchedResultsControllerDelegate
.
我的代码在启动后加载数据时工作正常。但是,NSFetchedResultsController
不更新 TableView 每当它在后台线程中处理并保存数据时。特别是 NSFetchedResultsController 的委托(delegate)方法 -controllerWillChangeContent:controller
等永远不会被调用。
我已经仔细检查了 SQLite 数据库是否正确包含数据。
这就是我在 View Controller 中处理和保存数据的方式:
[backgroundContext performBlock:^{
[company parseAttributesFrom:xmlStr inManagedObjectContext:backgroundContext]; //self.managedDocument.managedObjectContext
NSError *error = nil;
[backgroundContext save:&error];
if (error) NSLog(@"error: %@",error.localizedDescription);
[self.managedDocument.managedObjectContext performBlock:^{
NSError *error = nil;
[self.managedDocument.managedObjectContext save:&error];
if (error) NSLog(@"error: %@",error.localizedDescription);
}];
[self.managedDocument saveToURL:self.managedDocument.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:NULL];
[self.managedDocument updateChangeCount:UIDocumentChangeDone];
}];
当底层数据发生变化时,如何让 NSFetchedResultsController 自动更新 TableView?
感谢您的帮助!
最佳答案
我认为原因在于 managedObjectContext。您在背景中进行更改,NSFetchedResultsController
从主要的获取。因此,您需要通过添加上下文更改的观察者来合并对该上下文的更改
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(contextChanged:) name:NSManagedObjectContextDidSaveNotification object:nil];
这是 Marcus Zarra 的一个很棒的教程——核心数据的大师)
希望有帮助。
http://www.cimgf.com/2011/08/22/importing-and-displaying-large-data-sets-in-core-data/
关于objective-c - UIManagedDocuments 获取新数据后 NSFetchedResultsController 不更新 TableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11192916/