2

私はコアデータに関するCS193pの講義をフォローしてきましたが、新しい管理対象オブジェクトを挿入するときに問題が発生しました。

エラーは次のとおりです。

キャッチされなかった例外「NSInternalInconsistencyException」が原因でアプリを終了しています。理由:「+ entityForName:このモデルで「Card」という名前のエンティティが見つかりませんでした。」

データモデルファイルに「Card」エンティティを作成しました。ただし、データモデルファイルをすべて削除すると同じエラーが発生するため、データモデルファイルが正しく見つからないように感じます。UIManagedDocumentオブジェクトがこのエラーの原因となっているデータモデルを見つけられなかったことが原因であるかどうかをどのように確認できるのでしょうか。

これが私のコントローラークラスで行っていることです:

NSURL *docURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
NSURL *databaseURL = [docURL URLByAppendingPathComponent:@"Cards Database"];
self.cardsDatabase = [[UIManagedDocument alloc] initWithFileURL:databaseURL];

if (![[NSFileManager defaultManager] fileExistsAtPath:[self.cardsDatabase.fileURL path]]) {
    [self.cardsDatabase saveToURL:self.cardsDatabase.fileURL forSaveOperation:UIDocumentSaveForCreating completionHandler:^(BOOL success) {
        NSLog(@"Done");
    }];
} else if (self.cardsDatabase.documentState == UIDocumentStateClosed) {
    NSLog(@"Closed");
    [self.cardsDatabase openWithCompletionHandler:^(BOOL success) {
        if (success) {
            NSLog(@"Opened");
            [self addSampleData];
        }
    }];
} else if (self.cardsDatabase.documentState == UIDocumentStateNormal) {
    NSLog(@"Normal");
}


- (void)addSampleData
{
    NSManagedObjectContext *context = self.cardsDatabase.managedObjectContext;

    [context performBlockAndWait:^{
        Card *card = [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:context];

        card.title = @"Test Title";
    }];

    [self.cardsDatabase saveToURL:self.cardsDatabase.fileURL forSaveOperation:UIDocumentSaveForOverwriting completionHandler:^(BOOL success) {
        NSLog(@"Saved");
    }];
}

次の行でエラーが発生します。

Card *card = [NSEntityDescription insertNewObjectForEntityForName:@"Card" inManagedObjectContext:context];
4

2 に答える 2

1

シミュレーターをリセットしてみて(デバイスでは、アプリを削除してください)、ビルドをクリーンアップして、再実行してください。これで、「エンティティを特定できませんでした」に関連する問題のほとんどが解決されるはずです。

于 2012-10-11T02:25:38.107 に答える
1

この種の問題は、エンティティの属性の名前を変更してCore Dataモデルを更新し、デバイスから古いCore Dataモデルを使用してアプリをクリーンアップ(削除)せずに実行した場合に発生する可能性があります。ライトマイグレーションまたはモデルマッピングを使用する予定がない限り、アプリを実行するたびに発生する可能性があることに注意してください

于 2012-10-11T04:21:06.523 に答える