すでに開始しているプロジェクトでコアデータをセットアップしようとしています。他のエラーもいくつかありましたが、これに絞り込みました。
*** キャッチされない例外 'NSInternalInconsistencyException' が原因でアプリを終了します。理由: '+entityForName: エンティティ名 'Manuf' の NSManagedObjectModel が見つかりませんでした''
問題を絞り込み、この質問に対する可能な解決策を絞り込んだと思います。ここで答えてください: アレックスの答え.
ただし、これが私に当てはまるかどうかは完全にはわかりません。混乱の理由は、アプリデリゲートとビューコントローラーですべてを設定する代わりに、実際にアプリデリゲートとオブジェクトクラスを使用しているためです。だから、誰かがここで私の問題を特定して修正するのを手伝ってくれることを願っています...
これは、問題を引き起こしているオブジェクト クラスのコード セグメントです。これは、coredata アプリ用に xcode によって生成されたテンプレート コードとほぼ同じですが、並べ替えとテーブルビューは必要ないため除外されています。
- (NSFetchedResultsController *)fetchedResultsController
{
if (__fetchedResultsController != nil) {
return __fetchedResultsController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
// Edit the entity name as appropriate.
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Manuf" inManagedObjectContext:self.managedObjectContext]; //this is the line where my code fails and generates the error in the log
[fetchRequest setEntity:entity];
// Edit the section name key path and cache name if appropriate.
// nil for section name key path means "no sections".
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:@"Master"];
aFetchedResultsController.delegate = self;
self.fetchedResultsController = aFetchedResultsController;
NSError *error = nil;
if (![self.fetchedResultsController performFetch:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should not use this function in a shipping application, although it may be useful during development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
return __fetchedResultsController;
}
アップデート:
これは私が間違っていると思うところです。テンプレート コードでは、コントローラーとコンテキストは appdelegate 内で次のように設定されます。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Override point for customization after application launch.
UINavigationController *navigationController = (UINavigationController *)self.window.rootViewController;
ICDMasterViewController *controller = (ICDMasterViewController *)navigationController.topViewController;
controller.managedObjectContext = self.managedObjectContext;
return YES;
}
オブジェクトクラスですべての作業を行っているため、アプリデリゲートでこれを初期化する方法がわかりませんか?
appdelegate で今やろうとしていることとは対照的に
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//Add status bar
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackOpaque];
[[UIApplication sharedApplication] setStatusBarHidden:NO withAnimation:UIStatusBarAnimationFade];
self.window.rootViewController = self.navigationController; //Adds RootViewController to the NavigationController interface
self.navigationController.navigationBar.tintColor = [UIColor grayColor];
[self.window makeKeyAndVisible];
//try setting up context for my nsobjectclass EngineResponses
EngineResponses *engineResponses = [[EngineResponses alloc] init];
engineResponses.managedObjectContext = self.managedObjectContext;
return YES;
}