我完全坚持这个。我的基本问题是我的:
- (NSFetchedResultsController *)fetchedResultsController
方法在尝试读取我的核心核心实体时崩溃,因为 managedObjectContext / UIManagedDocument 为零。目前我认为这是因为我的 UIManagedDocument 没有打开/准备好。所以在过去的 3 个小时里,我一直在努力做到这一点,以便在文档打开之前不会触发我的委托方法。
这是我用来获取文档的代码:
if (!self.document) {
[[CATManagedDocumentHandler sharedDocumentHandler] performWithDocument:^(UIManagedDocument *document) {
self.document = document;
}];
}
这在我的应用程序的任何其他地方都可以正常工作,但对于我的 tableView 中的委托方法来说,打开过程似乎不够快。
到目前为止我看过的链接:
http://omegadelta.net/2011/05/10/how-to-wait-for-ios-methods-with-completion-blocks-to-finish/
关于 dispatch_queue_t 和 dispatch_sync 的调用
Grand Central Dispatch (GCD) 与 performSelector - 需要更好的解释
iOS - 如何在线程(使用 GCD)结束它的工作时收到通知
我试过:阻塞主线程直到我得到 NSNotification(在 CATManagedDocumentHandler 中设置)&阻塞主线程直到我得到一个块回调。
这些都不起作用。我的应用程序只是冻结。我想错了吗?如何让委托方法等到我的文档打开/准备好?或者我应该采取不同的方法吗?
谢谢
卡尔。