objective-c - UIManagedDocuments 获取新数据后 NSFetchedResultsController 不更新 TableView

标签 objective-c ios core-data ios5 nsfetchedresultscontroller

我正在使用 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/

相关文章:

ios - 如何将 RGB 颜色转换为 HTML 颜色?

objective-c - 坐标区域的中心坐标

ios - 如何在空数组的基础上更改 UItableview 中的 NumberOfRowsInSection

ios - 尝试将 CMTime 存储为核心数据上的可转换属性

objective-c - 当没有时,NSManagedObjectContext 对 hasChanges 返回 YES

objective-c - 在 objective-c 或 swift 中覆盖 pod 文件方法的最佳实践是什么?

objective-c - 委托(delegate)单例对象

ios - 是否可以在不通知用户的情况下发布应用程序更新?

iphone - CLLocationManager 地理围栏/startMonitoringForRegion : vs. startMonitoringForSignificantLocationChanges : vs. 10 分钟开始更新调用

objective-c - 当删除前一个元素时,如何设置与其他元素的一对一关系?