1

Core Data を既存のアプリケーションに追加しています。次の手順に従っています。

  • フレームワークのインポート

  • モデルの作成

スタックのセットアップに加えて、次のコードを使用しています。

- (NSManagedObjectContext *) managedObjectContext {
    if (managedObjectContext != nil) {
        return managedObjectContext;
    }
    NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
    if (coordinator != nil) {
        managedObjectContext = [[NSManagedObjectContext alloc] init];
        [managedObjectContext setPersistentStoreCoordinator: coordinator];
    }

    return managedObjectContext;
}

- (NSManagedObjectModel *)managedObjectModel {
    if (managedObjectModel != nil) {
        return managedObjectModel;
    }
    managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];

    return managedObjectModel;
}

-(NSPersistentStoreCoordinator *)persistentStoreCoordinator {

    if (persistentStoreCoordinator != nil) {
        return persistentStoreCoordinator;
    }

    NSURL *storeUrl = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"xxxxx.sqlite"]];

    NSError *error = nil;
    persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel: [self managedObjectModel]];
    if (![persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeUrl options:nil error:&error]) {
       // Handle error
    }    

    return persistentStoreCoordinator;
}

- (NSString *)applicationDocumentsDirectory {
    return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}

しかし、データを保存しようとすると、次の例外が発生します

キャッチされていない例外 NSInternalInconsistencyExceptionが原因でアプリを終了しています。理由: 'これ NSPersistentStoreCoordinatorには永続的なストアがありません。保存操作を実行できません。

4

1 に答える 1

4

この問題は、アプリケーションを実行してからモデルを変更したことが原因である可能性があります。

最も簡単な解決策は、シミュレーター/デバイスからアプリケーションを削除してから、クリーンアップを実行して、再試行することです。

より正しい解決策は、XCodeデータモデルに変更を加えた後も「保存操作の失敗」が発生し続けることで示唆されているように、軽い移行に対処することです。

簡単な提案は、XCode4およびCore Data:SQLデバッグを有効にして、内部で何が起こっているかを確認する方法で提案されているように、CoreDataログを有効にすることです。

お役に立てば幸いです。

于 2012-10-14T11:03:20.557 に答える