我一直在關注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上下文,它是UI發生的所有操作發生的位置。根上下文被設置爲子的父上下文。
謝謝!
更新 愚蠢的我...我想我有一個部分的解決方案,但不知道這將如何在用戶計算機上工作。因此,如果我取消選中「摘要」標籤中的「啓用應用程序沙箱」,一切似乎都有效。雖然這對我有用,但我將其提交給Mac App Store時不得不將其打開,並且不確定這將如何影響用戶。
你要保存什麼URL?在iOS上,您無法保存到主包中。不知道這是如何工作在OS X上,但你可能想看看這個。 –
謝謝斯科特。應用程序正在重新打開一個以前的模型版本保存的舊文件。在啓動過程中,此方法正在執行。所以我沒有保存到捆綁包中(至少......我不認爲我是)。 – schmudu