我觉得我今天已经阅读了 Stack Overflow 上的所有 CoreData 问题,但仍然非常卡住。:)
我正在开发一个使用 CoreData 的应用程序,该应用程序基于斯坦福大学 cs193p 第 14 讲(Photomania 应用程序)中说明的方法。它使用实现 NSFetchedResultsController 委托的 UITableViewController 子类,当然,在获取结果时表格会自动更新。
一切正常,但当 Document 填充数据时 UI 会阻塞,因为它发生在主线程(即文档的 managedObjectContext)中。我已经在后台线程中下载数据,这只是实际填充导致阻塞的 NSManagedObjects 的代码。该讲座提到使用 NSManagedObjectContext 的 Parent 上下文来在后台加载 Document,然后在主线程中“重新获取”数据以填充表格。我几乎可以正常工作(我认为),除了我的表格经常出现重复条目。似乎 [self.tableView beginUpdates] / [self.tableView endUpdates] 会解决这种事情,但是因为我正在后台上下文中保存 NSManagedObjectContext 我不知道我会把它放在哪里。
我也可能以完全错误的方式解决这个问题。:) 无论如何,这里是相关代码:
NSManagedObjectContext *backgroundContext;
backgroundContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
// document is my UIManagedDocument
backgroundContext.parentContext = document.managedObjectContext;
[backgroundContext performBlockAndWait:^{
// Do stuff here to populate the document.
[backgroundContext save:nil];
}];