我正在使用由 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 变量始终为零,我似乎无法弄清楚为什么。错误信息对我帮助不大:
Error Domain=NSCocoaErrorDomain Code=134000“操作无法完成。(Cocoa 错误 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
,或者无论您使用何种商店类型。
关于ios - 无法获取核心数据持久存储的元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28842820/