使用CoreData应用程序启动时App Delegate中的NSInvalidArgumentException

时间:2013-05-03 21:01:07

标签: ios core-data executefetchrequest

我有这个应用程序我已经工作了一段时间,我使用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吗?

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

2 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

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