2011-11-06 139 views
0

我知道在堆棧溢出中有很多關於核心數據遷移的問題,但我找不到解決方案。核心數據輕量級遷移屬性重命名

我成功地通過在源模型中將名爲「LastName」的屬性重命名爲目標模型中的「姓氏」來進行輕量級遷移。我一步一步做到這一點,它的工作原理除了「姓氏」列上的所有以前的數據現在都已丟失。新的重命名屬性存在,我可以插入新的實體和新插入的實體的值是確定的。舊數據和舊屬性存在問題。正如蘋果文檔所述,我將目標模型上新重命名屬性的重命名標識符與XCode接口或源代碼模型中的舊屬性的名稱相關聯,或者通過代碼進行操作。我關於重命名屬性的數據總是丟失。

這是預料還是錯過了什麼?

Thnxs,

回答

1

最近,我在那裏,即使重命名標識符,數據丟失我的模型各版本之間的同樣的問題。該模型從版本10跳到15(版本11和版本12之間發生變化),所以重命名標識符未被拔出,即使將它包含在更高版本中也是如此。我還遇到了如何處理該屬性的任何後續更改的問題。

最後,在將持久性存儲連接到應用程序之前,我將以下代碼添加到App Delegate中的persistentStoreCoordinator方法的中間(這是Apple的佔位代碼的一部分,當您在添加Core Data的情況下設置新項目時)持久存儲協調執行輕型遷移:

NSEntityDescription *entity = [[[self managedObjectModel] entitiesByName] objectForKey:@"EntityName"]; 
NSPropertyDescription *property = [[entity attributesByName] objectForKey:@"NewAttributeName"]; 
[property setRenamingIdentifier:@"OldAttributeName"]; 

然後我用(CoreData how to detect new version of an app so I can update the model?)StackOverflow上這個問題,其中介紹瞭如何存儲CFBundleVersion旁邊的持久性存儲。這樣,如果您再次更新屬性名稱,則可以檢查持久存儲的當前版本,並知道該商店的最新版本,因此您可以即時選擇正確的重命名標識符。

相關問題