Почему происходит сбой инициализации 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.