我試圖在覈心數據模型上執行自定義遷移,但遷移的唯一數據是與自定義遷移相關聯的數據。魔法記錄自定義核心數據遷移不提取現有數據
在以前的版本我的申請,我是用
[MagicalRecord setupCoreDataStackWithStoreNamed:@"xxxxxx.sqlite"];
要啓用自動遷移我切換到使用。
[MagicalRecord setupCoreDataStackWithAutoMigratingSqliteStoreNamed:@"MTDataStore.sqlite"];
在新的應用程序版本,我還創建了一個新的模型版本,映射模型,並用於遷移自定義轉換政策。預先存在的版本總共有4個型號。
對模型所做的更改包括爲一個實體添加的屬性,這應該由自動遷移設置來處理。另一個變化是從實體中刪除4個屬性(attr1,attr2,attr3,attr4),並向該實體添加一個屬性(鍵)。然後,我將舊屬性映射到字符串的新屬性「鍵」。
這是我爲轉換策略所針對的'key'屬性設置的值表達式。
FUNCTION($entityPolicy, "keyToJSONString:" , $source)
這是轉換策略中的代碼。
-(NSString*)keyToJSONString:(MTWirelessCDKey*)wirelessCDKey
{
NSString *lengthJSON = [MTUtility JSONString:wirelessCDKey.length];
NSString * jsonKey = [NSString stringWithFormat:@"{\"gauge\":\"%@\",\"length\":\"%@\",\"diam\":\"%@\",\"head\":\"%@\"}",
wirelessCDKey.attr1,
lengthJSON,
wirelessCDKey.attr2,
wirelessCDKey.attr3];
return jsonKey;
}
當我運行使用Xcode中應用程序的新版本,在安裝了舊版本,具有映射模型和自定義轉換政策模型顯示了在我的SQLite數據庫正確的數據,但所有的與其他三個模型相關的數據丟失。
僅用於故障排除目的,我試圖爲不同的模型創建映射模型,這從我的理解是不必要的。當我運行新的應用程序時,該模型的數據會隨之而來,但不是之前運行的模型。
在新版本的應用程序中,我還將運行遷移的模型設置回原始,只是爲了確保其他數據通過正常運行,然後將所有舊數據拉過來。
任何建議,將不勝感激。
注意:這一切都是在設備上的Xcode 7(iOS 9 SDK)中的Objective-c中完成的。
更新: 所以,我花了近24小時左右,真正攻擊這個問題,並意識到,我沒有什麼實際發生的事情有很好的理解,當我開始這個問題。所以我現在要用解決方案更好地解釋它。
當我最初創建項目時,我設置了4個不同的xcdatamodeld引用。所有這些都被存儲在同一個sqlite存儲中。現在根據我讀過的內容創建多個xcdatamodelds並不一定是壞事,但是您需要確保將它們存儲在自己的sqlite存儲中。
因此,我發現/想出的解決方案其實很簡單。由於我將所有數據存儲在同一個sqlite存儲中,因此我可以將所有xcdatamodeld對象合併爲一個。
假設你有4個xcdatamodeld對象。 xcdatamodeld1,2,3和4.
您可以將xcdatamodeld1,2和3手動合併到xcdatamodeld4中,方法是打開查找器中的模型對象並將xml合併到一個文件中。當您下次啓動核心數據存儲時,看起來好像沒有任何變化。
之後,您可以像平常一樣運行遷移。