CoreData整理(四)——數據遷移和其餘問題

CoreData整理(四)——數據遷移和其餘問題


目錄

  • 輕量級數據遷移
  • 後續遇到的問題

輕量級數據遷移

在作app版本的迭代過程當中,不免會遇到要修改.xcdatamodeld文件,好比新增或刪除一個實體、增長或刪除一個原有實體的屬性等。若是你沒有設置數據遷移的話,app更新後原有的數據將會被清空,這固然是不行的,因此此時須要進行數據的遷移操做。
core data能夠設置輕量級的數據遷移,系統自動會幫你分析差別,進行映射,這種方式只適用於簡單的增刪實體或是增刪屬性等操做。除此以外還有一種至關複雜的自定義數據遷移,通常來講不會用到,本文不打算進行說明。git

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

在PSC的實例化方法中添加自動遷移的相關設置。
clipboard.png數據庫

若是你使用了MagicalRecord,只須要將以前初始化CoreDataStack的方法setupCoreDataStack 修改爲使用 setupAutoMigratingCoreDataStack進行初始化。segmentfault

clipboard.png

2.添加新的CoreData版本,並切換到新版本多線程

選中.scdatamodeld文件後,依次點擊菜單項中的Editor->Add Model Version...
clipboard.pngapp

此時.xcdatatmodeld文件就能夠展開看到其包含的多個版本
clipboard.pngspa

根據下圖所示的步驟便可將當前版本切換至你想要的版本
clipboard.png線程

此時就能夠在新版本上進行修改了
clipboard.png3d

ps:code

  1. 開啓輕量級自動遷移以後,app每次啓動都會判斷實體與數據庫表結構是否存在差別,若是存在差別,則會更新數據庫文件,更新爲新的表結構。
  2. 若是在原有實體上增長了新屬性,則遷移後的數據中該字段爲空;若是在原有實體上減小了屬性,那麼遷移後的數據中該字段會被刪掉,對應的數據也會被刪除,即便你再切回到原始的版本,數據也不會恢復。

後續遇到的問題

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

經過Editor->Create NSManageObject Sublass...建立出MO類,報以下錯誤:
clipboard.png

解決:
自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」建立出來就沒有問題了。

clipboard.png

參考:知乎


回顧

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


參考文章

coredata 數據遷移
定義 Core Data 遷移

相關文章
相關標籤/搜索