我正在使用由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
,或您使用的任何存储类型。