CoreDataのエラーメモ

CoreDataのエラーメモです。

・エラーメッセージ

Cocoa error 134100

・原因
アプリ起動後のEntityの追加等で既に存在するsqliteファイルと新しいxcdatamodeldの不整合でおこる。
・解決策
アプリを長押しで削除した後、再実行


・エラーメッセージ
英: An instance of NSFetchedResultsController requires a non-nil fetchRequest and managedObjectContext
意: NSFetchedResultsControllerの初期化時にnilのfetchRequestとmanagedObjectContextを使っちゃだめですよ


・原因
NSFetchedResultsControllerの初期化時にnilのmanagedObjectContextを渡す等

・解決策

// 以下の処理を呼んでCoreDataスタックを作る
// CoreDataManagerを自作してる場合は[COREDATAMANAGER managedObjectContext];等
- (NSManagedObjectContext *)managedObjectContext {
    
    if (_managedObjectContext != nil) {
        return _managedObjectContext;
    }
    
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        _managedObjectContext = [[NSManagedObjectContext alloc] init];
        [_managedObjectContext setPersistentStoreCoordinator:coordinator];
    }
    return _managedObjectContext;
}


・エラーメッセージ
英: entityForName: could not locate an NSManagedObjectModel for entity name '''
意: entityForNameメソッド: エンティティ名を見つけられなかった。
・原因
xcdatamodeldのエンティティ名がコード上と異なるかNSManagedObjectModelがnil
・解決策

// 以下の追加メソッドを呼ぶ前にmanagedObjectContextを取得、CoreDataスタックを生成しておく。
// 新しいUserを追加するメソッド内
    CDUser *user = [NSEntityDescription insertNewObjectForEntityForName:@"User"
                                                 inManagedObjectContext:_managedObjectContext];



・エラーメッセージ

The persistent cache of section information does not match the current configuration. You have illegally mutated the NSFetchedResultsController's fetch request, its predicate, or its sort descriptor without either disabling caching or using +deleteCacheWithName

・原因
NSFetchedResultsControllerの初期化時にcacheNameを指定した場合、キャッシュを削除せずNSPredicate等を変更した。
・解決策
キャッシュを利用しない(nilを指定する)又は毎回削除する。
参考:Cocoaの日々 http://cocoadays.blogspot.jp/2010/07/uisearchdisplaycontroller_15.html

// これで消すか
[NSFetchedResultsController deleteCacheWithName:@"Master"];

// 以下のようにnilを指定する。
    NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:self.managedObjectContext sectionNameKeyPath:nil cacheName:nil];



・バグ
NSFetchedResultsController利用時でセルのデータは削除できるがセルが消えない
・原因
NSFetchedResultsControllerDelegateのdidChangeObjectが呼ばれていない
・解決策
viewDidLoadだけでdelegateを設定していると画面遷移後nilになった時呼ばれないのでviewWillAppearに書く