4

我对我的模型做了一些更改(但我还不想迁移,所以我只是删除应用程序,构建干净等)

但是,当我在 iPhone 或模拟器中运行它时,会出现以下错误:

*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“executeFetchRequest:错误:获取请求必须具有实体。”

我这样设置实体:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"Document" inManagedObjectContext:managedObjectContext];

我的 managedObjectContext 不是零。但我怀疑它没有正确加载对象模型或类似的东西,因为如果我在模型中显示实体,则列表为空:

managedObjectModel = [[NSManagedObjectModel mergedModelFromBundles:nil] retain];
NSLog(@"%d", [[managedObjectModel entities] count]);

如何确保模型已加载?

4

7 回答 7

8

你在哪里“显示实体”?如果它们没有出现在数据模型编辑器中,它们就不存在。

您可以使用-[NSManagedObjectModel entities]来获取模型具有的实体数组。

反过来,您可以使用-[NSPersistentStore managedObjectModel]查看加载的模型,然后查询其实体。

但是,必须告诉您,大多数情况下,此错误是由拼写错误引起的。这就是使用定义或类方法返回实体名称的好处。

于 2010-06-13T00:22:55.933 回答
6

我遇到了同样的问题。正如 TechZen 的评论中所建议的,对我来说,解决方法是右键单击 Xcode 3.x 中的文件,选择“获取信息”,然后在“目标”选项卡下勾选相应的框。

更新:在 Xcode 4 中,“获取信息”菜单选项已被删除。相反,您可以在右侧边栏中为文件定义“目标成员”。

于 2010-11-09T20:09:05.540 回答
1

另一件需要注意的是,当您单击 xcdatamodeld 文件查看实体时,在左侧的 CONFIGURATIONS 默认配置下,您会看到实体列表。如果它们是您项目中的类(我认为它们应该是),请确保将类名放在 Class 列下。

于 2012-09-26T00:11:22.170 回答
0

我在使用 Xcode 4.4 同时打开多个项目时遇到了这个问题。

如果您有多个项目,Xcode 4.4 可能会使用来自错误项目的数据模型而找不到您的实体。解决方案是一次只打开一个项目。

于 2012-08-02T08:57:49.110 回答
0

有同样的问题。在我的情况下,旧模型仍在加载,所以我必须清理项目并从模拟器中卸载应用程序。

调试:

  • 为了打印出对象模型中的所有实体,使用了这个: NSDictionary* dictionary = [self.managedObjectContext.persistentStoreCoordinator.managedObjectModel entitiesByName]; [字典 enumerateKeysAndObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id key, id obj, BOOL *stop) { NSLog(@"%@ = %@", key, obj); }];
  • 也用它来打印出实体的数量: NSLog(@"Number of entity: %d", [[self.managedObjectContext.persistentStoreCoordinator.managedObjectModel entity] count]);
于 2013-02-07T05:33:34.740 回答
0

就我而言:

  1. Model.xcdatamodeld是第一个应用程序(名称 A),然后它工作正常
  2. 我将修改应用程序添加到静态库
  3. 将第 2 步静态库添加到新应用程序(名称 B)

使用应用程序 B 时,我遇到了与堪察加半岛相同的问题

您可以尝试移至Model.xcdatamodeld主项目尝试,这对我有用。

于 2015-04-16T07:18:45.880 回答
0

我遇到了这个问题并且有一个非常奇怪的修复。我已经从不同的项目中复制/粘贴了一些代码来实际创建实体(然后更改了实体和上下文的值):

NSEntityDescription *e = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:testContext];

..无论我检查什么,尽管实体肯定存在于上下文中,但它返回 nil 。

我所做的只是删除该行,更改变量名,然后手动重新输入:

NSEntityDescription *entity = [NSEntityDescription entityForName:@"MyEntity" inManagedObjectContext:testContext];

我希望我能告诉你为什么这会解决它 - 我仍然不确定。我之前尝试过发布到此页面的所有解决方案。我怀疑这与“打开多个项目”有关 - 因此,如果您和我处于相同的情况,请尝试手动重写数据模型加载/获取过程。

于 2015-07-08T16:39:43.043 回答