我一直在关注CS193p关于核心数据的讲座,当我插入一个新的托管对象时,我遇到了一个问题。UIManagedDocument如何找到默认的数据模型文件?
的错误是:
终止应用程序由于未捕获的异常'NSInternalInconsistencyException',原因是: '+ entityForName:无法 找到名为实体'。在这个模型中' 卡
我在我的数据模型文件中创建了“卡”实体。不过,我有一种感觉,它不正确地找到数据模型文件,因为一起删除该文件给出相同的错误。我想知道我是如何找出是否由于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];
您是对的。我做了一个模拟器内容重置后工作。我之前尝试过清洗,但没有工作,但是这绝对解决了这个问题。干杯! – redshift5