2013-04-05 93 views
2

我希望一切都很好:)遷移核心數據和映射模型

我有一個使用核心數據的數據庫。在我的應用程序V1.0中,用戶可以在應用程序中導入一些文件。現在,對於我的V2.0,我想在我的模型中添加一個屬性,但擁有V1.0並擁有一些存儲文件的用戶必須保存所有文件(如果升級應用程序,則不會刪除...) 。因此,我使用新屬性創建了一個新的數據模型,並將當前版本化的核心數據模型設置爲我的新數據模型...好的。但如果啓動我的應用程序,該文件被刪除。

通常情況下,我必須使用映射模型。但如何做到這一點?當我創建映射模型時,哪個是源數據模型和目標數據模型?

非常感謝您的幫助! 祝你有美好的一天! :)

編輯:

如果我只添加一個新的屬性,但不能編輯屬性的名稱,也許我並不需要創建一個映射模型...沒有?

回答

4

如果使用映射模型,您的源模型將是v1.0模型,目標將是您的新v2.0模型。您可以通過使用輕量級遷移而不使用映射模型而脫身,文檔here

這就是說你需要去你的應用程序委託並設置持久存儲的相關選項。

它應該是這個樣子

NSDictionary *options = @{NSMigratePersistentStoresAutomaticallyOption: @YES, NSInferMappingModelAutomaticallyOption: @YES}; 

[persistentStoreCoordinator addPersistentStoreWithType:storeType configuration:config URL:storeURL options:options error:&error]; 

NSMigratePersistentStoresAutomaticallyOption鍵告訴核心數據檢查當前管理對象模型版本是你使用,併到店遷移到更新的模型商店不同。 NSInferMappingModelAutomaticallyOption告訴它試圖將自己的映射工作。這是'輕量級遷移'位。

大部分情況已經存在,您只需添加選項字典即可。它將在- (NSPersistentStoreCoordinator *)persistentStoreCoordinator方法中。如果您未設置至少NSMigratePersistentStoresAutomaticallyOption,則不會進行移植。

輕量級映射在開發時也很有用。這意味着您可以對模型進行更改,而無需每次都重新映射映射。