iOS:NSPersistentStoreCoordinator addPersistentStoreWithType:配置:URL:选项:错误:

iOS:NSPersistentStoreCoordinator addPersistentStoreWithType:配置:URL:选项:错误:,ios,core-data,Ios,Core Data,我正在使用CoreData构建一个iOS应用程序。我的一小部分用户(大约1/1000)报告说,该应用程序在启动后不久就崩溃了。我怀疑持久存储协调器未能将数据库添加为持久存储。我无法重现测试中的任何错误,也无法从用户那里获得任何调试信息。是否有人知道此方法产生的任何常见错误 - (NSPersistentStoreCoordinator *)persistentStoreCoordinator { if (persistentStoreCoordinator_ != nil) return

我正在使用CoreData构建一个iOS应用程序。我的一小部分用户(大约1/1000)报告说,该应用程序在启动后不久就崩溃了。我怀疑持久存储协调器未能将数据库添加为持久存储。我无法重现测试中的任何错误,也无法从用户那里获得任何调试信息。是否有人知道此方法产生的任何常见错误

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    if (persistentStoreCoordinator_ != nil) return persistentStoreCoordinator_;

    NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"databasefile.sqlite"];

    NSError *error = nil;

    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:self.managedObjectModel];

    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }

    return persistentStoreCoordinator_;
}
您可以查看,但如果没有任何调试数据,这对您没有多大好处

我唯一想检查的是:(1)在代码中意外写入或覆盖存储区的其他地方,例如,您打算通过复制文件来备份文件,但不是部分覆盖文件。(2) 更改文件的权限

我在MacOS上见过这两种情况,但在iOS上从未见过。该存储位于documents文件夹中,有一个非常通用的名称,因此可以想象,在iOS 4.x下,您可以在其上复制一个文件


由于您没有对persistent store做任何花哨的事情,我认为这极不可能是崩溃的原因。如果您使用标准样板代码,那么您所谈论的是经过高度测试和完善的代码。在我怀疑商店之前,我会怀疑应用程序包中存在某种类型的资源,例如图像或音频文件

我认为您已经为实体添加了新属性,这就是为什么old.sqlite无法与new匹配的原因

解决方案:

如果您遇到类似“用于打开存储的模型与用于创建存储的模型不兼容”的错误 然后只需删除数据库并创建一个新数据库,或者删除应用程序并重新安装


如果我错了,请告诉我。

谢谢,@TechZen。你说得对,问题根本不是核心数据。我最终从一个用户那里得到了一个崩溃报告,主线程在解析xml文档时被阻塞了。新手犯了错误。@Raider,我遇到了和你一样的问题:两年内有三次错误报告,没有崩溃报告,结论是肯定是商店加载失败了。我花了很多时间来改进核心数据调用的错误处理,但可能我走错了方向。我不做任何xml解析,但我会在应用程序启动时打开应用商店,因此可能有其他东西在阻止这几个用户。你能提供更多关于你的解决方案的细节吗?这似乎是我学习的机会;)