iOS:NSPersistentStoreCoordinator可能导致的错误addPersistentStoreWithType:configuration:URL:options:error:

时间:2011-06-09 19:16:03

标签: ios core-data

我正在使用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_;
}

2 个答案:

答案 0 :(得分:0)

您可以查看Core Data Constants Reference,但如果没有任何调试数据,它对您没有多大帮助。

我唯一可以考虑检查的是:(1)意外地在代码中的其他地方写入或覆盖商店,例如您打算通过复制文件来备份文件,而是将其部分覆盖。 (2)更改文件的权限。

我在MacOS上看到了这两种情况,但从未在iOS上看到过。商店位于文档文件夹中,并且具有非常通用的名称,因此可以想象,在iOS 4.x下,您可以将文件复制到其上。

由于您没有对持久性存储做任何事情,我认为这不太可能是导致崩溃的原因。如果您使用标准样板代码,那么您正在谈论经过高度测试和改进的内容。我怀疑某种类型的资源,例如在我怀疑商店之前,应用程序包中的图像或音频文件。

答案 1 :(得分:0)

我认为你已经为实体添加了新的属性,这就是为什么旧的.sqlite没有与new匹配的原因。

解决方案:

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

如果我错了,请告诉我。