Ios NSInvalidArgumentException应用程序内委托与CoreData应用程序一起启动

Ios NSInvalidArgumentException应用程序内委托与CoreData应用程序一起启动,ios,core-data,executefetchrequest,Ios,Core Data,Executefetchrequest,我有这个应用程序,我已经工作了一段时间,我用CoreData创建的。然而,我最近开始构建数据模型并使用CoreData。现在我已经这样做了,每当我在模拟器中运行应用程序时,它都会在第一行的app Delegate/didfishlaunchingwithoptions中崩溃: self.window.rootViewController = self.navigationController; 坠机原因是: Terminating app due to uncaught exception '

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

self.window.rootViewController = self.navigationController;
坠机原因是:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'executeFetchRequest:error: A fetch request must have an entity.'
如果我把那行注释掉,它就会运行。奇怪!我还没有在代码中对CoreData做过任何工作,所以还没有回迁。可能是因为数据模型发生了变化而导致了一些系统获取?我已经从模拟器中删除了应用程序,并进行了清理/构建,但问题仍然存在

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

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


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

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

例如,“主详细信息应用程序”模板在MasterViewController.m中创建一个
NSFetchedResultsController
。它使用一个fetch请求来查找默认的
事件
实体类型。如果该实体不存在,则获取请求将因您看到的错误而崩溃。我猜您删除了默认实体,创建了一些自己的实体,但没有更改发出获取请求的代码


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

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

您正在执行fetch请求,并且您的NSManagedObjectContext可能为空。你在任何地方使用NSFetchedResultsController吗?有趣的是,@MarkM,它还没有到达我的fetches。我敢打赌,在分配rootViewController属性期间发生的一些自动获取中,某些数据模型更新没有被合并。我正在学习CoreData教程,因此我还不知道如何在应用程序中管理数据模型更新。请执行“在工作区中查找”以获取数据,并在每个实例上放置断点。你会发现提取发生在哪里。好主意,可惜没有成功。有一个RootViewController类在
fetchedResultsController
方法中执行一些获取,但在此之后会发生崩溃。fetchedResultsController与哪个实体对话?您肯定有一个获取正在进行,而且由于NSFetchedResultsController也有一个在发生更改时更新的方法,您可能希望在那里进行检查。它是用来做tableViewController的吗?是的,这就是我害怕的。我在旧版本的XCode 4中创建了这个应用程序,我很确定它使用的是单视图应用程序模板。我不记得见过主细节模板。真的没什么好怕的。确保Xcode为您生成的任何代码都与您的数据模型匹配。可能存在不匹配,而且可能不难找到。