私はコアデータに関する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];