我正在使用由Core Data支持的RESTKit。我正在尝试检测是否有新的核心数据模型版本。我将其设置为自动映射更改,我只需要检测迁移即可更新UI。我的代码是:

NSError *error;
NSURL *sourceURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Model" ofType:@"momd"]]
NSDictionary *sourceMetadata = [NSPersistentStoreCoordinator metadataForPersistentStoreOfType:nil URL:sourceURL error:&error];
BOOL needsMigration = ![[self managedObjectModel] isConfiguration:nil compatibleWithStoreMetadata:sourceMetadata];


sourceMetadata变量始终为nil,我似乎无法弄清楚原因。错误消息对我不是很有帮助:

错误域= NSCocoaErrorDomain代码= 134000“操作无法完成。(可可错误134000。)”

我要去哪里错了?

最佳答案

您的错误是sourceURL是模型文件的路径:

NSURL *sourceURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"Model" ofType:@"momd"]]


即应用程序捆绑包中的Model.momd。您需要使用持久性存储文件的路径,可能是$SOMETHING.sqlite,也可能是应用程序的文档目录中。

错误134000是NSPersistentStoreInvalidTypeError,Apple将其描述为“表示未知的持久性存储类型/格式/版本的错误代码”。这表明URL上的持久性存储文件出了点​​问题,或者可能是丢失了。首先要做的是查看error,看看NSPersistentStoreCoordinator试图告诉您什么。它很有可能会告诉您确切的问题所在,但您没有在听。

如果该URL上存在文件,则可能有助于将查找调用的第一个参数从nil更改为NSSQLiteStoreType,或您使用的任何存储类型。

10-07 19:43
查看更多