这是toggleAddProject方法的代码,核心数据代码与Apple的CoreDataBooks示例中的代码几乎相同,但是当我单击添加按钮时,应用程序在{{1}开头的行上与entityForName: could not locate an NSManagedObjectModel for entity name 'Project'
崩溃}}
newProjectController.project
一切都已合成,项目实体存在。我无法弄清楚它崩溃的原因。大多数人似乎能够通过在方法本身或viewDidLoad中插入以下代码来修复此错误:
-(IBAction)toggleAddProject
{
NewProjectViewController *newProjectController = [[[NewProjectViewController alloc] initWithStyle:UITableViewStyleGrouped] autorelease];
// Create a new managed object context for the new project -- set its persistent store coordinator to the same as that from the fetched results controller's context.
NSManagedObjectContext *addingContext = [[NSManagedObjectContext alloc] init];
self.addingManagedObjectContext = addingContext;
[addingManagedObjectContext setPersistentStoreCoordinator:[[fetchedResultsController managedObjectContext] persistentStoreCoordinator]];
newProjectController.project = (Project *)[NSEntityDescription insertNewObjectForEntityForName:@"Project" inManagedObjectContext:addingContext];
[addingContext release];
UINavigationController *addNewNavigationController = [[UINavigationController alloc] initWithRootViewController:newProjectController];
[self.navigationController presentModalViewController:addNewNavigationController animated:YES];
[addNewNavigationController release];
}
为我的应用委托修改后,它没有任何区别。谢谢你的帮助。
答案 0 :(得分:40)
此错误只有几个可能的来源:
答案 1 :(得分:23)
当我有几个不同的NSManagedObjectContext
时,我遇到了这个问题。调试它的快速方法是检查不同的连接位,并确保在调用上下文之前列出了我的实体。
NSLog(@"Context: %@",context);
NSLog(@"PS Coord : %@",context.persistentStoreCoordinator);
NSLog(@"MOM : %@", context.persistentStoreCoordinator.managedObjectModel);
NSLog(@"Entities : %@",[[context.persistentStoreCoordinator.managedObjectModel entities] valueForKey:@"name"]);
答案 2 :(得分:3)
使用调试器并确认您的模型不是零。这是此错误的最常见原因。如果它不是nil,那么在实体名称中查找拼写错误。
答案 3 :(得分:2)
Apple文档提供了有关调试错误entityForName: could not locate an NSManagedObjectModel for entity name 'Foo'
的一些很好的信息。
查看核心数据编程指南的this部分。
答案 4 :(得分:1)
好的我也遇到了这个问题,因此我解决了这个问题。原始代码如下:
Event *event = (Event *)[NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:managedObjectContext];
虽然代码简洁,但似乎调试器无法显示有关错误位置的更详细信息,因为您要创建和配置“事件”实体的新实例(或者您的实体的任何名称)。
相反,我将其分为三行,调试器显示了更多信息:
Event *event = [[NSManagedObject alloc] init];
NSManagedObjectContext *moc = [self managedObjectContext];
event = [NSEntityDescription insertNewObjectForEntityForName:@"Event" inManagedObjectContext:moc];
我发现我没有为其中一个属性设置正确的Type,而且我的代码中有一个拼写错误,所有这些都是调试器指出的。
答案 5 :(得分:0)
在我的开发过程中,我找不到我后来添加的实体。 什么对我有用:(基本上是一个理智小费)
每次更改数据模型时都要卸载应用程序!
数据模型由Core Data在安装之间进行缓存,以确保完整性保持完整。从模拟器/ iPhone中删除应用程序,以便能够测试您的更改。
PS:有没有人知道如何自动完成?答案 6 :(得分:-1)
TechZen在......我的情况是#4。完成以下链接中的步骤,这应该可以帮助您将适当的CoreData方法添加到现有项目中并正确设置所有内容,这样您就不会遇到错误。