2013-08-26 187 views
0

我有一個功能強大的應用程序,主要是面向數據庫的。我的客戶目前正在使用該應用程序,它有大量預先存在的保存數據(注意:它全部是本地的,不保存在在線數據庫中)。問題是,我知道當我更新數據模型時,我將不得不卸載然後重新安裝應用程序,否則它將因數據模型中的不一致而崩潰。有什麼方法可以在更新數據模型的同時保存數據嗎?保存核心數據?

+1

http://mobile.tutsplus.com/tutorials/iphone/core-data_schema-versioning-and-lightweight-migrations/ –

回答

3

我知道當我更新數據模型時,我將不得不卸載然後重新安裝應用程序,否則它將因數據模型中的不一致而崩潰。

不是真的,除非你不打算處理這個變化。核心數據支持將數據從一個數據模型版本遷移到新數據模型,以便現有數據存儲更新以使用新模型,而無需卸載或執行其他極端步驟。在大多數情況下,它甚至是自動的 - 你只需告訴它來處理變化。

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


if (![psc addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:options error:&error]) { 
    .... 
} 

如果你改變只包括一個或多個以下的這一工程:

  • 添加或移除屬性
  • 更改屬性的具體地說,在添加持久性存儲時,使用options參數「可選」標誌(假設您將它設爲非可選項,則提供默認值)
  • 重命名實體或屬性
  • 添加,刪除或重命名實體
  • 添加父母或子女的實體,或移動屬性不同點在層次
  • 改變從一對一的關係,以一對多

如果你重命名無論如何,您需要設置重命名標識符,以便Core Data知道如何遷移。

如果這還不夠,Core Data支持非自動遷移有幾種不同的方式。這在Apple的文檔中有詳細介紹,我不會在這裏重現。

+0

這正是我所期待的。我不知道我可以自動遷移。謝謝。 –