Я полностью застрял на этом. Моя основная проблема в том, что мой:
- (NSFetchedResultsController *)fetchedResultsController
Метод дает сбой, когда пытается прочитать мою сущность Core Core, так как manageObjectContext / 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/
Выполнение блока кода вместо @selector
О вызове dispatch_queue_t и dispatch_sync
Grand Central Dispatch (GCD) vs. PerformSelector - нужен лучшее объяснение
GCD для выполнения задачи в основном потоке
iOS — как получить уведомление, когда поток (использующий GCD) завершает свою работу
Я пробовал: блокировать основной поток, пока не получу NSNotification (настроенный в CATManagedDocumentHandler) и блокировать основной поток, пока не получу обратный вызов блока.
Ни один из них не работает. Мое приложение просто зависает. Я думаю об этом неправильно? Как я могу заставить метод делегата ждать, пока мой документ не будет открыт/готов? Или есть другой подход, который я должен использовать с этим?
Спасибо
Карл.