2009-11-21 70 views
5

我有一個託管對象上下文,我添加了兩個不同的SQLite存儲。我使用Mananged Object Model中的配置將某些實體分配給一個存儲,將其他實體分配給另一個實體。配置稱爲「UserDB」和「MainDB」。核心數據遷移錯誤消息「'模型不包含配置'XYZ'。'」

一切正常,直到我嘗試使用自動遷移。創建新的託管對象模型版本並向UserDB配置中的某個實體添加新屬性後,向商店協調員添加舊版本存儲庫(用於UserDB相關存儲庫)時出現異常:「模型不包含配置'UserDB''。'我無法在Google上找到此錯誤。任何人在那裏使用配置的多個商店?任何人都有一個想法,我可能做錯了什麼?

堆棧看起來像這樣:

objc_exception_throw 
-[NSManagedObjectModel isConfiguration:compatibleWithStoreMetadata:] 
-[NSStoreMigrationPolicy sourceModelForStoreAtURL:metadata:error:] 
-[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:] 
-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:] 
-[MyAppDelegate persistentStoreCoordinator] 
+0

也碰到這個問題。創建遷移圖時是否發生同樣的事情? – pokstad 2011-10-16 19:26:42

回答

11

這看起來像與遷移+配置中的錯誤。調用addPersistentStoreWithType時,我可以通過執行相同的動作並傳遞nil來配置問題。發生遷移,然後我可以創建一個新的持久性存儲協調器,並使用正確的配置字符串參數再次添加存儲。

這是我遇到的第二個配置相關的錯誤。顯然,這並不是一個很好的測試功能

+0

感謝您發佈此信息。這確實是我的問題。 – awolf 2010-12-06 22:02:32

+0

謝謝,這似乎爲我工作。 – futureshocked 2011-08-26 23:10:05

+0

在過去的一天左右,我一直在摔跤。這個解決方案「幾乎」起作用。但它看起來像是有一個時間問題:即只有暫停執行足夠長的時間纔有效。 – 2011-09-14 20:43:49

0

我有同樣的問題。事實模式是相同的,錯誤信息相同。但事實證明,這是我自己錯誤的結果。

比方說,舊的模型是Blah.xcdatamodel和新的Blah 2.xcdatamodel。在意識到我的錯誤並創建了Blah 2之前,我開始對Blah進行更改。然後,我使用版本控制系統(Git)恢復到舊的Blah,然後重新創建Blah 2.一切看起來都正確。但是我一定在返回過程中做了錯誤的事情,因爲當我想要仔細檢查當前項目文件夾中的Blah.xcdatamodel與我用於構建應用程序的早期版本的項目文件夾中的Blah.xcdatamodel是否真的相同(幸運的是,由於我不完全信任版本控制系統,因此我總是爲每個發佈版本保留一個壓縮的項目文件夾存檔),但我發現它們實際上是不同的,儘管它們在XCode中看起來完全相同。例如,文件大小不同。

我將舊的Blah替換到我當前的項目文件夾中,並且看到它一切都完美無缺,而不需要Ken所描述的解決方法。

我不是說Ken肯定犯了類似的錯誤,但是如果你確實遇到這個消息,至少應該確認你正在從中遷移的模型真的是用來創建有問題的數據的模型。

+0

我從那以後發現問題實際上沒有解決。看起來它只是第二次發揮作用,因爲數據實際上是第一次被遷移。換句話說,第一次運行它時,數據將被遷移,但應用程序失敗,並顯示「Model不包含配置'XYZ」消息。然後第二次運行良好。這當然不是一個很好的用戶體驗,所以我不得不採用像Ken這樣的兩階段方法。 – jfewtr 2011-03-07 10:36:59

+0

此外,這兩個階段的方法有其自己的問題,至少對我而言,即在用戶遷移數據後切換到另一個應用程序的第一次(也是唯一的第一次)崩潰。我將把這個問題放在一個單獨的問題中。 – jfewtr 2011-03-07 10:46:49