2011-08-24 53 views

回答

1

版本用途類似於版本上的應用程式,以指示除了在覈心數據演變的代碼是數據模型,即在.xcdatamodel文件中定義的實體,實體屬性和關係的相同的基本代碼的不同進化變化。

遷移是您對持久性存儲中的最終用戶現有數據執行的操作,以便格式化/構建存儲以使用新版本的數據模型。

它的工作原理是這樣的:

你發佈你的應用程序的1.0版本,它與一個版本1.0以及數據模型。最終用戶然後使用您的應用程序並使用數據模型1.0將其數據保存爲格式化/結構化的持久性存儲。

然後,您發佈應用的2.0版,並在此過程中對數據模型進行了更改,例如您更改屬性名稱,添加屬性或添加實體。您可以將數據模型版本化爲2.0(實際版本名稱是任意的)。然後,您可以提供自動遷移或手動遷移,以便可以將1.0持久性存儲文件中的最終用戶數據重新格式化爲數據模型2.0格式。

1

對核心數據模型所做的每一項更改都會生成新版本。每一次改變。

核心數據沒有一個模型的概念比另一個模型更新,但它只是知道它們是不同的。核心數據不會使用由您擁有的模型版本創建的商店(磁盤上的數據庫)。

這就是遷移進來的地方,這只是一個告訴Core Data如何從一個模型到另一個模型的過程,數據存儲在由特定模型創建的數據庫中。核心數據可以嘗試猜測(自動遷移),對於簡單的更改可以正常工作,但您可以手動創建更復雜的遷移,仔細從一個模型版本中提取數據,並將其放置到新模型版本的數據庫中。

你什麼時候創建新的模型版本?將具有Core Data模型的應用程序發送到App Store之後,應立即爲更改創建新的模型版本,以便原始模型版本可以爲App Store版本更高版本的人員創建遷移路徑。

什麼時候應該創建遷移?基本上,只要您向商店發運新版本,就需要從商店中的任何早期型號(因此可能在某人的手機上)到最新的數據模型版本找出一條路徑。如上所述,如果更改很簡單,您可以使用自動版本,但始終進行測試(保持每個應用商店版本均可訪問,以便您可以測試加載舊版本,然後遷移到新版本)。

順便說一句,一個可接受的計劃就是刪除現有的數據庫,如果模型已經改變了,只要你可以把某些用戶以某種方式返回到數據庫中(或者如果用戶從未放過任何東西,就像在緩存數據庫中一樣)。

+0

還有一件事,如果我們刪除一個實體,那麼我們應該手動遷移數據或類似的東西,我可以有一個更簡單的示例模型示例。我有很多疑問。新版本意味着相同的文件.xcmod​​el,當我們創建一個新模型.xcmod​​elId時,我們需要手動將數據遷移到另一個將由第二個模型創建的sqlite。合理?或者我搞砸了? – Vijay

+0

刪除實體是一個簡單的遷移。它可以使用自動遷移來完成。只需創建一個新版本並編輯模型並將其設置爲當前版本即可。 – Sandeep

+0

聽起來不錯。但是,當手動遷移出現時,我們使用手動遷移進行什麼樣的更改。我們怎麼知道我們應該使用手動migartion ?. – Vijay

相關問題