CoreData整理(四)——資料遷移和其他問題

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

CoreData整理(四)——資料遷移和其他問題


目錄

  • 輕量級資料遷移
  • 後續遇到的問題

輕量級資料遷移

在做app版本的迭代過程中,難免會遇到要修改.xcdatamodeld檔案,比如新增或刪除一個實體、增加或刪除一個原有實體的屬性等。如果你沒有設定資料遷移的話,app更新後原有的資料將會被清空,這當然是不行的,所以此時需要進行資料的遷移操作。
core data可以設定輕量級的資料遷移,系統自動會幫你分析差異,進行對映,這種方式只適用於簡單的增刪實體或是增刪屬性等操作。除此之外還有一種相當複雜的自定義資料遷移,一般來說不會用到,本文不打算進行說明。

1.在Core Data棧中設定自動遷移功能

在PSC的例項化方法中新增自動遷移的相關設定。

如果你使用了MagicalRecord,只需要將之前初始化CoreDataStack的方法setupCoreDataStack 修改成使用 setupAutoMigratingCoreDataStack進行初始化。

2.新增新的CoreData版本,並切換到新版本

選中.scdatamodeld檔案後,依次點選選單項中的Editor->Add Model Version…

此時.xcdatatmodeld檔案就可以展開看到其包含的多個版本

根據下圖所示的步驟即可將當前版本切換至你想要的版本

此時就可以在新版本上進行修改了

ps:

  1. 開啟輕量級自動遷移之後,app每次啟動都會判斷實體與資料庫表結構是否存在差異,如果存在差異,則會更新資料庫檔案,更新為新的表結構。
  2. 如果在原有實體上增加了新屬性,則遷移後的資料中該欄位為空;如果在原有實體上減少了屬性,那麼遷移後的資料中該欄位會被刪掉,對應的資料也會被刪除,即使你再切回到原始的版本,資料也不會恢復。

後續遇到的問題

問題1:Core Data建立ManageObjectClass之後報模型重複定義錯誤

通過Editor->Create NSManageObject Sublass…建立出MO類,報如下錯誤:

解決:
自Xcode 8起,Core Data中Entity的NSManagedObject Subclass預設由Xcode自動生成,並且無法在Project Navigator中看到,使用時可以直接#import匯入。
如果仍要使用“Create NSManagedObject Subclass”生成檔案的開發方式,可以找到Entity的“Codegen”選項(位於 Data Model inspector 中),將“Codegen”預設的“Class Definition”改為“Manual/None”,再使用“Create NSManagedObject Subclass”建立出來就沒有問題了。

參考:知乎


回顧

CoreData整理(一)——基本概念與簡單使用
CoreData整理(二)——多執行緒方案
CoreData整理(三)——MagicalRecord的使用
Demo地址


參考文章

coredata 資料遷移
定義 Core Data 遷移

相關文章

IOS開發 最新文章