我一直在与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
答案 0 :(得分:26)
这是一个相当常见的错误,它有三个原因:
NewsStand
代替NewsStands
。(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
文件添加到测试目标中。框架的行为与普通项目不同。