2017-04-18 100 views
0

我的應用程序正在爲第一個發行版v1完美工作。從appstore更新Coredata遷移後,應用程序崩潰

在第二個版本v2中,我在做coredata遷移時犯了一個錯誤 - 我意外地在我的coredata中爲一個實體(之前是空的)重命名了ID。由於該應用程序在更新時崩潰,但它在剛下載v2版本時正在運行。

現在,我應該在下一個版本v3中做些什麼來解決這個崩潰問題?

如果我將該實體的重命名ID替換爲空,則將更新v1 - > v2 - > v3中的應用程序。

但是,如果用戶剛剛下載v2,它會再次崩潰。

請給我一些這個問題的解決方法。提前致謝。

回答

0

使用核心數據輕量級遷移。輕量級遷移在應用程序開發的早期階段特別方便,因爲您可能會頻繁更改託管對象模型,但您不希望不斷重新生成測試數據。您可以遷移現有數據,而不必爲用於創建需要遷移的商店的每個模型版本創建自定義映射模型。

核心數據必須能夠推斷映射

執行自動輕巧遷移,核心數據需要能夠找到源和目標管理的對象模型本身在運行時。核心數據在由NSBundle的allBundles和allFrameworks方法返回的包中查找模型。如果將模型存儲在別處,則必須按照使用遷移管理器中描述的步驟(如果無法自動找到模型)中所述的步驟操作。然後,核心數據必須分析對持久實體和屬性的模式更改並生成推斷的映射模型。

對於核心數據,以便能夠產生推斷的映射模型,改變必須適應一個明顯的遷移模式,例如:

  • 簡單添加新的屬性的
  • 去除屬性的
  • 非可選屬性變爲可選
  • 可選屬性變爲非可選屬性,並定義默認值 值
  • 重命名實體或p roperty

來源:https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreDataVersioning/Articles/vmLightweightMigration.html

+0

我使用coredata輕量級遷移。我的問題如何處理從v2遷移到v3。從v1到v2遷移到v3將會起作用。 – MBN

+0

你說剛剛下載v2版本時它正在工作。如果您使用核心數據遷移,那麼在從v2遷移到v3時,它不會崩潰。 –

+0

您知道,我們必須在下一個版本中保持重命名ID相同。如果我忽略了ID並釋放,它會崩潰。 – MBN