2011-10-20 196 views
4

如在不支持使用映射模型的Apple documentationicloud的,核心數據,遷移和模型映射

模式遷移,所述(輕量級 遷移支持)。

我想知道,我們有我們需要處理iCloud的fonctionnality和映射模型遷移選項的情況下......我知道我需要改變我的核心數據模型在將來的功能添加到我的應用程序(不僅以輕量級的方式)。問題是我不能說現在需要哪些新實體以及與以前模型實體的關係。

我在想這樣一個序列:

1 - 啓動我的應用程序在做我的核心數據模型的映射遷移

2 - 讓它與iCloud的

同步如果iCloud包含適應新模型的事務日誌文件,這將工作。如果是舊的事務日誌文件(意味着適應舊的模型),它將失敗。

爲了避免這種情況,我想這樣做:

1 - 啓動我的應用程序,讓它與iCloud的

2同步 - 做我的核心數據的映射遷移模型

3 - 刪除舊的iCloud數據用新的更新它

如果iCloud已經包含更新的事務處理離子記錄文件(適用於新型號的手段)。

我需要的是一種檢查iCloud中的事務日誌是否與我當前的核心數據模型兼容的方法。有沒有辦法做到這一點 ?

謝謝。

+0

似乎可以做的是使用iCloud鍵值存儲模型版本,您可以在創建持久性存儲協調器或進行模型映射之前檢查模型版本。我想現在蘋果iCloud論壇上提供的iPhoneRecipes示例顯示iCloud和Core Data的使用仍然不穩定。同步並不總是成功,有時連接到iCloud失敗。我認爲在Apple更新之前我不會將iCloud與Core Data結合使用。 – dMathieuD

回答

2

我不會推薦在生產應用程序中使用Core Data和iCloud。

它不夠穩定。沒有簡單的方法檢查應用程序是否在iCloud設置中處於禁用狀態。更不用說如果用戶啓用後關閉iCloud支持,則可能出現的問題。

遷移是另一個問題。輕量級遷移工作得很好。但爲了進行映射模型遷移工作,您需要從現有iCloud「無處不在文件夾」中清除/清除內容,創建一個新名稱(使用新名稱)並更改與NSPersistentStoreUbiquitousContentURLKey關聯的值。而且,你需要確保所有的客戶都這麼做。其複雜但可行。不知道它是否值得,但...

關於版本的兼容性問題,我還沒有嘗試過,但如果版本匹配的想法是從iCloud中的事務日誌,並通過對ManagedObjectModel檢查「compatibleWithStoreMetadata」方法以某種方式獲取存儲元數據:

// Get current model 
NSManagedObjectModel *myModel = [self managedObjectModel]; 

// Check compatibility 
BOOL isCompatible = [myModel isConfiguration:nil compatibleWithStoreMetadata: metadataFromTransactionLogEntry];