Почему происходит сбой инициализации Core Data, когда я пытаюсь сделать это в этих точках?

Я вижу, как решить проблему, но меня беспокоит, что я не понимаю, почему это не работает. У меня есть подкласс UIViewController, который использует Core Data, поэтому ему нужен NSManagedObjectContext. Контроллер загружается из файла пера, где он находится под контроллером навигации, который находится внутри контроллера вкладок.

Я попытался сделать это в initWithCoder и viewDidLoad, и по какой-то причине это не работает:

MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = [[appDelegate managedObjectContext] retain];

По какой-то причине managedObjectContext возвращает nil, и я получаю это при попытке позже создать управляемый объект:

*** Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: «+ entityForName: не удалось найти объект с именем« LogRecord »в этой модели».

Это то, что вы получаете, когда ваш контекст равен нулю или модель не может быть загружена (или действительно отсутствует сущность).

Если я делаю то же самое в верхней части моего метода saveLogEntry (который создает управляемые объекты и сохраняет контекст), то он работает просто отлично.

Если я делаю то, что делает пример приложения Recipes:

- (void)applicationDidFinishLaunching:(UIApplication *)application {

    loggingViewController.managedObjectContext = self.managedObjectContext;

    // Standard stuff
    [window addSubview:tabBarController.view];
    [window makeKeyAndVisible];
}

(loggingViewController - это IBOutlet в делегате приложения).

Кто-нибудь знает, что конкретно может происходить здесь? Кажется, что это не сработает, если сделать «слишком рано», но особенно с viewDidLoad, я ожидаю, что это сработает, так как я думаю, что это происходит после вызова addSubview.

Ответы на вопрос(1)

Ваш ответ на вопрос