iOS:NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error 会导致哪些错误:
Posted
技术标签:
【中文标题】iOS:NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error 会导致哪些错误:【英文标题】:iOS: What errors can be caused by NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error: 【发布时间】:2011-06-09 19:16:03 【问题描述】:我正在使用 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】:您可以查看Core Data Constants Reference,但如果没有任何调试数据,它对您没有多大用处。
我唯一能想到检查的是:(1)在代码中的其他地方意外写入或覆盖存储,例如您打算通过复制文件来备份文件,而是部分覆盖它。 (2) 更改文件的权限。
我在 MacOS 上见过这两种情况,但在 iOS 上从未见过。该存储位于文档文件夹中,并且具有非常通用的名称,因此可以想象,在 iOS 4.x 下,您可以在其上复制一个文件。
由于您没有对持久存储做过任何花哨的事情,我认为它极不可能是导致崩溃的原因。如果您使用标准样板代码,那么您所谈论的是经过高度测试和完善的东西。我会怀疑某种类型的资源,例如在我怀疑商店之前,应用程序包中的图像或音频文件。
【讨论】:
谢谢@TechZen。你是对的,问题根本不是核心数据。我终于从用户那里得到了一份崩溃报告,并且在解析 xml 文档时主线程被阻塞了。菜鸟失误。 @Raider,我遇到了与您相同的问题:两年内报告了三个错误报告,没有崩溃报告,并且得出的结论是商店加载失败。我花了很多时间来改进围绕核心数据调用的错误处理,但也许我走错了路。我不进行任何 xml 解析,但我在应用程序启动时打开了商店,因此可能有其他东西阻止了这几个用户。你能提供更多关于你的解决方案的细节吗?这似乎是我学习一些东西的机会;)【参考方案2】:我认为您已经为实体添加了新属性,这就是为什么旧的 .sqlite 无法与新的匹配。
解决方案:
如果您收到“用于打开商店的模型与用于创建商店的模型不兼容”之类的错误。 然后只需删除数据库并创建一个新数据库或删除应用程序并重新安装。
如果我错了,请告诉我。
【讨论】:
以上是关于iOS:NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error 会导致哪些错误:的主要内容,如果未能解决你的问题,请参考以下文章