Dlaczego inicjalizacja danych podstawowych kończy się niepowodzeniem, gdy próbuję to zrobić w tych punktach?

Widzę, jak rozwiązać problem, ale niepokoi mnie, że nie rozumiem, dlaczego to nie działa. Mam podklasę UIViewController, która używa danych podstawowych, więc potrzebuje NSManagedObjectContext. Kontroler jest ładowany z pliku nib, gdzie jest umieszczony pod kontrolerem nawigacyjnym, który znajduje się wewnątrz kontrolera kart.

Próbowałem to zrobić w initWithCoder i viewDidLoad iz jakiegoś powodu nie działa:

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

Z jakiegoś powodu managedObjectContext zwraca zero i otrzymuję to, gdy próbuję utworzyć zarządzany obiekt później:

*** Aplikacja kończąca z powodu nie przechwyconego wyjątku „NSInternalInconsistencyException”, powód: „+ entityForName: nie można zlokalizować encji o nazwie„ LogRecord ”w tym modelu.”

To jest to, co dostajesz, gdy twój kontekst jest zerowy lub model nie może zostać załadowany (lub naprawdę brakuje mu encji).

Jeśli zrobię dokładnie to samo na górze mojej metody saveLogEntry (która tworzy zarządzane obiekty i zapisuje kontekst), to działa dobrze.

Jeśli zrobię to, co robi przykładowa aplikacja Recipes:

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

    loggingViewController.managedObjectContext = self.managedObjectContext;

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

(loggingViewController to IBOutlet w delegacie aplikacji).

Czy ktoś wie, co konkretnie tu się dzieje? Wygląda na to, że kończy się niepowodzeniem, jeśli zostanie wykonane „zbyt wcześnie”, ale szczególnie w przypadku viewDidLoad Spodziewam się, że zadziała, ponieważ myślę, że występuje po wywołaniu addSubview.

questionAnswers(1)

yourAnswerToTheQuestion