我有一個使用核心數據的項目,每當我需要對我的模型進行小改動時,我都會執行遷移。但是,在過去的一週中,我不得不對模型進行徹底檢查,並且反應了我無法遷移任何數據的方式。iOS避免使用舊的核心數據模型
有了這個,我想知道是否有方法檢查我在設備中具有哪個版本的模型,並且可能通過代碼刪除它,並從頭開始完全創建一個新模型。這可能不是最受歡迎的方式,但如果任何人有更好的解決方案,我都會接受建議。
我有一個使用核心數據的項目,每當我需要對我的模型進行小改動時,我都會執行遷移。但是,在過去的一週中,我不得不對模型進行徹底檢查,並且反應了我無法遷移任何數據的方式。iOS避免使用舊的核心數據模型
有了這個,我想知道是否有方法檢查我在設備中具有哪個版本的模型,並且可能通過代碼刪除它,並從頭開始完全創建一個新模型。這可能不是最受歡迎的方式,但如果任何人有更好的解決方案,我都會接受建議。
兩個合理的選擇:
使用NSManagedObjectModel一貫的版本mechansim。撞上新模型的版本。 Core Data會在打開商店之前自動檢查給定商店是否與應用程序中的某個模型兼容;如果沒有,當你嘗試添加它時會給你一個錯誤。因此,如果您未在應用中提供舊型號,Core Data將不會使用任何舊商店。您可以通過刪除商店來回應錯誤。您也可以在使用-isConfiguration:compatibleWithStoreMetadata:
添加之前檢查商店。有關更多信息,請參閱Initiating the Migration Process。
對使用新模型創建的任何商店使用不同的名稱。 iOS應用程序僅使用一個或兩個具有特定名稱的商店並不罕見。您可能知道您在以前版本的應用中用於商店的名稱;切換到不同的名稱可讓您輕鬆瞭解商店是否與舊型號或新型號兼容。
如果您更改了屬性,以便新模型中不存在某些舊屬性,請嘗試使用respondsToSelctor:方法來檢查實體是否響應舊選擇器。如果是這樣,你有舊的模型。
我該如何去使用第一個選項?我看看設備是否包含包含特定版本ID的核心數據sqlite文件? – Seb 2012-02-13 23:14:52
抱歉不清楚 - 我很快寫了這個答案的第一個版本。我已經改變了答案,試圖更清楚地解釋。希望能幫助到你。 – Caleb 2012-02-13 23:45:22
感謝您的回答。現在對我來說更清楚了,而且更有意義。 – Seb 2012-02-14 01:10:46