Por que a inicialização do Core Data falha quando tento fazer isso nesses pontos?
Eu vejo como resolver o problema, mas me incomoda não entender por que isso não funciona. Eu tenho uma subclasse UIViewController que usa o Core Data, então ele precisa do NSManagedObjectContext. O controlador é carregado de um arquivo de ponta onde é colocado sob um controlador de navegação que está dentro de um controlador de guias.
Eu tentei fazer isso em initWithCoder e viewDidLoad e, por algum motivo, não funciona:
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = [[appDelegate managedObjectContext] retain];
Por alguma razão, managedObjectContext retorna nulo e eu recebo isso quando tento criar um objeto gerenciado mais tarde:
*** Aplicativo de finalização devido à exceção não identificada 'NSInternalInconsistencyException', razão: '+ entityForName: não foi possível localizar uma entidade denominada' LogRecord 'neste modelo.'
Qual é o que você obtém quando seu contexto é nulo ou o modelo não pode ser carregado (ou realmente não tem a entidade).
Se eu fizer exatamente a mesma coisa no topo do meu método saveLogEntry (que cria objetos gerenciados e salva o contexto), então funciona muito bem.
Se eu fizer o que o aplicativo de exemplo Receitas faz:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
loggingViewController.managedObjectContext = self.managedObjectContext;
// Standard stuff
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
}
(loggingViewController é um IBOutlet no delegado do aplicativo).
Alguém sabe o que especificamente pode estar acontecendo aqui? Parece que falha se feito "muito cedo", mas especialmente com viewDidLoad eu esperaria que funcione desde que eu acho que ocorre após addSubview é chamado.