CoreData错误:+ entityForName:无法找到实体名称的NSManagedObjectModel

时间:2011-08-17 22:28:52

标签: objective-c xcode core-data

我一直在与CoreData挣扎几天,但我一直收到这个错误:

  

'NSInternalInconsistencyException',原因:'+ entityForName:无法找到实体名称的NSManagedObjectModel。

我检查了实体名称以及我在代码中写的内容,它们是相同的。我还重新创建了对象数据模型,甚至从模拟器中删除了应用程序,但似乎没有任何修复它。 这就是我所拥有的:

保存到CoreData的方法:

-(IBAction)save:(id)sender {
    NSManagedObject * newNews = [NSEntityDescription insertNewObjectForEntityForName:@"NewsStand"
    inManagedObjectContext:coredata.managedObjectContext];
    [newNews setValue:news_title forKey:@"story_title"];
    [newNews setValue:news_desc forKey:@"story_desc"];
    [newNews setValue:news_image  forKey:@"story_image"];
    [newNews setValue:test  forKey:@"story_url"];
    [coredata commit];
    NSLog(@"data saved!!!!");
}

我已经在一个单独的类中实现了核心数据的所有方法:

applicationDocumentsDirectory,  
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator, 
- (NSManagedObjectModel *)managedObjectModel, 
- (NSManagedObjectContext *)managedObjectContext

6 个答案:

答案 0 :(得分:26)

这是一个相当常见的错误,它有三个原因:

  1. 拼错实体名称,例如NewsStand代替NewsStands
  2. 拥有nil托管对象上下文
  3. 加载了没有或错误的托管对象模型。
  4. (1)是最常见的,但(3)比(2)更常见。您可以使用密钥路径检查是否正在加载正确的模型:

    aManagedObjectContext.persistentStoreCoordinator.managedObjectModel.entities
    

    然后检查实体的名称。

答案 1 :(得分:2)

我遇到了类似的问题,发现TechZen的答案很有帮助(特别是检查实体的建议)。但是,我的问题变成了(2)的变体:我可以看到moc本身不是nil,但我没有设置持久性存储协调器。

[aManagedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator]

或类似。

我会将此添加为对TechZen答案的评论,但还不能,并希望将其包括在内以防其他人遇到我的问题。

答案 2 :(得分:2)

在我的开发过程中,我找不到我后来添加的实体。 什么对我有用:

每次更改数据模型时都要卸载应用程序!

数据模型由Core Data在安装之间进行缓存,以确保完整性保持完整。从模拟器/ iPhone中删除应用程序,以便能够测试您的更改。

PS:有没有人知道如何自动完成?

答案 3 :(得分:1)

确保coredata.managedObjectContext不是零。

答案 4 :(得分:0)

没有代表发表评论 - 但Luc Bloom的回复修复了 MY 问题。我完全忘记了在初始构建/安装后我在数据模型中改变了一些东西,并且花了很长时间把头撞在桌子上。

答案 5 :(得分:0)

如果您正在编辑框架并运行单元测试以获取错误,请确保将xcdatamodeld文件添加到测试目标中。框架的行为与普通项目不同。