Objective c UIManagedDocument如何查找默认数据模型文件?
我一直在关注CS193p关于核心数据的讲座,在插入新的托管对象时遇到了一个问题 错误是: 由于未捕获异常而终止应用程序'NSInternalInconsistencyException',原因:'+entityForName:无法 在此模型中找到名为“Card”的实体。' 我已经在数据模型文件中创建了“卡”实体。但是我有一种感觉,它没有正确地找到数据模型文件,因为将该文件一起删除会产生相同的错误。我想知道如何确定是否是由于UIManagedDocument对象没有找到导致此错误的数据模型 以下是我在控制器课程中所做的:Objective c UIManagedDocument如何查找默认数据模型文件?,objective-c,ios,xcode,core-data,Objective C,Ios,Xcode,Core Data,我一直在关注CS193p关于核心数据的讲座,在插入新的托管对象时遇到了一个问题 错误是: 由于未捕获异常而终止应用程序'NSInternalInconsistencyException',原因:'+entityForName:无法 在此模型中找到名为“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];
尝试重置模拟器(在设备中,删除应用程序),清理构建并再次运行。这应该可以解决大多数与“找不到实体”相关的问题。当您更新核心数据模型时,可能会发生这种问题,方法是更改实体属性的名称,然后在不从设备上清除(删除)具有旧核心数据模型的应用程序的情况下运行。除非您计划使用光迁移或模型映射,否则请注意,无论何时运行应用程序,都可能发生光迁移或模型映射。在我重置模拟器内容后工作。我以前试过清洁,但没有效果,但这确实解决了问题。干杯