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.

questionAnswers(1)

yourAnswerToTheQuestion