問題を解決する方法はわかりますが、なぜこれが機能しないのかわからないのが気になります。Core Dataを使用するUIViewControllerサブクラスがあるため、NSManagedObjectContextが必要です。コントローラは、タブコントローラ内にあるナビゲーションコントローラの下に配置されているnibファイルからロードされます。
initWithCoderとviewDidLoadでこれを実行しようとしましたが、何らかの理由で機能しません。
MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate];
self.managedObjectContext = [[appDelegate managedObjectContext] retain];
何らかの理由で、managedObjectContextはnilを返します。後で管理対象オブジェクトを作成しようとすると、次のようになります。
***キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:「+ entityForName:このモデルで「LogRecord」という名前のエンティティを見つけることができませんでした。」
これは、コンテキストがnilの場合、またはモデルをロードできない場合(または実際にエンティティがない場合)に得られるものです。
saveLogEntryメソッド(管理対象オブジェクトを作成してコンテキストを保存する)の先頭でまったく同じことを行うと、問題なく機能します。
Recipesサンプルアプリケーションが行うことを行う場合:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
loggingViewController.managedObjectContext = self.managedObjectContext;
// Standard stuff
[window addSubview:tabBarController.view];
[window makeKeyAndVisible];
}
(loggingViewControllerは、アプリデリゲートのIBOutletです)。
ここで具体的に何が起こっているのか誰か知っていますか?「早すぎる」と失敗したように見えますが、特にviewDidLoadの場合は、addSubviewが呼び出された後に発生すると思うので、機能すると思います。