无法找到实体名称的NSManagedObjectModel

Chr*_*sJP 20 iphone cocoa-touch core-data

这是toggleAddProject方法的代码,Core Data代码与Apple的CoreDataBooks示例中的代码几乎相同,但是当我单击添加按钮时,应用程序崩溃entityForName: could not locate an NSManagedObjectModel for entity name 'Project'就行了newProjectController.project

-(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];
}
Run Code Online (Sandbox Code Playgroud)

一切都已合成,项目实体存在.我无法弄清楚它崩溃的原因.大多数人似乎能够通过在方法本身或viewDidLoad中插入以下代码来修复此错误:

if (managedObjectContext == nil) 
{ 
    managedObjectContext = [(CoreDataBooksAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext]; 
}
Run Code Online (Sandbox Code Playgroud)

修改为我的应用程序委托后,它没有任何区别.谢谢你的帮助.

Tec*_*Zen 40

此错误只有几个可能的来源:

  1. 实体名称中的错字.
  2. Nil托管对象上下文对象.
  3. 无法将包含实体的模型添加到上下文使用的持久性存储中.
  4. 无法将正确的持久存储添加到上下文本身.


gho*_*fly 23

当我有几个不同NSManagedObjectContext的时候,我遇到了这个问题.调试它的快速方法是检查不同的连接位,并确保在调用上下文之前列出了我的实体.

NSLog(@"Context: %@",context);
NSLog(@"PS Coord : %@",context.persistentStoreCoordinator);
NSLog(@"MOM : %@", context.persistentStoreCoordinator.managedObjectModel);
NSLog(@"Entities : %@",[[context.persistentStoreCoordinator.managedObjectModel entities] valueForKey:@"name"]); 
Run Code Online (Sandbox Code Playgroud)

  • 到目前为止,找出问题的最佳解决方案.这只是帮助我发现我的persistentStoreCoordinator没有正确连接. (2认同)