0

我有这个应用程序,我已经使用 CoreData 创建了一段时间。但是,我最近开始构建数据模型并使用 CoreData。现在我已经这样做了,每当我在模拟器中运行应用程序时,它都会在第一行的 App Delegate / didFinishLaunchingWithOptions 中崩溃:

self.window.rootViewController = self.navigationController;

崩溃是:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'

如果我注释掉那一行,它就会运行。奇怪的!目前我还没有在代码中对 CoreData 做任何工作——所以还没有获取。也许有一些系统获取,因为数据模型改变了?我已经从模拟器中删除了该应用程序并完成了清理/构建,但问题仍然存在。

第一个问题:如何修复错误?

第二个问题:这是一个问题,我可以忽略设置rootViewController吗?

第三个问题:为什么现在失败了?

4

2 回答 2

0

根据您使用的项目模板,Xcode 可能会为您设置默认获取请求。当您编辑模型时,您需要自定义这些。

例如,“Master-Detail Application”模板NSFetchedResultsController在 MasterViewController.m 中创建一个。它使用查找默认Event实体类型的获取请求。如果该实体不存在,则提取请求将因您看到的错误而崩溃。我猜您删除了默认实体,创建了一些您自己的实体,但没有更改发出 fetch 请求的代码。

注释掉该行可以防止崩溃,但也会阻止应用程序运行。你只是跳过了一些关键的工作,但你需要把那行放回去并修复代码。

于 2013-05-03T22:03:31.683 回答
0

在我的特殊情况下,模板必须在数据模型中设置了一个默认的事件实体,并设置了一个默认的获取控制器来管理批量获取结果,这在我的应用程序中根本不需要。当我删除 Event 实体时,因为它与应用程序无关,这导致它在实例化生成的 View Controller 时崩溃。所以我注释掉了不必要的获取控制器代码。

于 2013-05-08T15:54:46.633 回答