在设置基于文档的应用程序方面,我一直遵循 Marcus Zarra 的指南。到目前为止,它进展顺利,但是我正在尝试实施核心数据轻量级迁移,但我似乎遇到了障碍。模型的旧版本和新版本之间的唯一区别是其中一个实体的 NSString 属性。
在 NSDocument 中,我添加了以下代码:
- (BOOL)configurePersistentStoreCoordinatorForURL:(NSURL *)url ofType:(NSString *)fileType modelConfiguration:(NSString *)configuration storeOptions:(NSDictionary *)storeOptions error:(NSError **)error
{
NSMutableDictionary *newStoreOptions;
if (storeOptions == nil) {
newStoreOptions = [NSMutableDictionary dictionary];
}
else {
newStoreOptions = [storeOptions mutableCopy];
}
[newStoreOptions setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption];
[newStoreOptions setObject:[NSNumber numberWithBool:YES] forKey:NSInferMappingModelAutomaticallyOption];
BOOL result = [super configurePersistentStoreCoordinatorForURL:url ofType:fileType modelConfiguration:configuration storeOptions:newStoreOptions error:error];
NSLog(@"base url:%@ model:%@", [url baseURL], [self managedObjectModel]);
return result;
}
只是为了看看发生了什么,我输出了从
[super configurePersistentStoreCoordinatorForURL:url ofType:fileType modelConfiguration:configuration storeOptions:newStoreOptions error:error];
这就是我从 Xcode 得到的:
NSUnderlyingError = "Error Domain=NSCocoaErrorDomain Code=512 \"The file couldn\U2019t be saved.\" UserInfo=0x104521930 {NSUnderlyingException=Error validating url for store}";
reason = "Can't add destination store";
我在 SO 上看到了几篇文章,称一些用户在尝试同时读/写时遇到了这个问题,但我不相信我属于这一类。
另外我不知道这是否会有所不同,但我将我的应用程序设置为具有两个上下文。一个是写入persistentStore 的根上下文,第二个是子上下文,UI 的所有操作都发生在该子上下文中。根上下文被设置为孩子的父上下文。
谢谢!
更新 愚蠢的我......我想我有一个部分解决方案,但不确定这将如何在用户计算机上工作。因此,如果我在“摘要”选项卡中取消选中“启用应用沙盒”,一切似乎都可以正常工作。虽然这对我有用,但当我将它提交到 Mac App Store 时我将不得不打开它,并且不确定这将如何影响用户。