2011-04-27 48 views
0

我試圖通過使用NSMigrationManager進行手動遷移來執行Core Data存儲的遷移。我創建在Xcode使用默認的嚮導映射模型(第4版),然後在代碼中發現它使用核心數據存儲遷移時出現的問題

[NSMappingModel mappingModelFromBundles:nil forSourceModel:sourceModel destinationModel:targetModel]; 

這似乎很好地工作。唯一的問題是,在我嘗試稍微調整映射模型後(使用描述here的方法將一個實體拆分爲兩個)之後,以前的方法不再有效,它只返回nil(這意味着映射模型不再與源和目標模型兼容?!)。另外,有趣的是,Xcode顯示了我的下拉菜單,其源模型和目標模型都沒有改變,並且設置爲正確的模型。

兼容性檢查如何工作,並且映射模型是否真的發生了一些變化,可能導致映射模型與源/目標模型的原始組合不兼容。

更新:從模擬器卸載應用程序和恢復sqlite數據庫後,它再次工作,這在我看來,就好像一些模型沒有正確更新..奇怪的是,我現在想知道是否這可能發生在真正的更新或它只是一個Xcode /模擬器問題。

+0

說明:您是否曾經遷移模型,然後嘗試再次遷移模型?你兩次使用同一個映射模型嗎? – TechZen 2011-04-28 13:59:41

+0

@TechZen:這是相同的模型,我已經恢復了sqlite文件。映射模型在物理上是相同的,但是它已經做了一些修改(調整了屬性映射等) – 2011-04-28 15:07:04

回答

0

每次您使用映射模型進行遷移時,它會改變持久性存儲。您必須每次開始使用同一版本的商店,並以完全相同的順序執行遷移以獲得相同的結果。

我通常會建議您定期刪除並重新創建開發中使用的商店。通常我在每次測試運行開始時都這樣做,即使數據集相當大。如果你不這樣做,那麼通過在開發代碼中做出的修改,你可能會冒險在商店中建立「kruft」。