我在Mac OS X 10.5上使用Core Data時遇到了一個令人討厭的錯誤。核心數據遷移驗證錯誤
所有的實體在我的應用程序中有共享相同名稱的類。
到目前爲止,我已經完成了5次遷移,沒有任何問題。
我正在使用XML數據存儲。 我有13個實體的V5數據模型,其中4個是抽象的。它看起來像這樣: alt text http://synapticmishap.co.uk/ObjectModel.jpg
我做什麼
創建我的數據的新版本 模型 - 這是V6。
添加一個新的實體(JGToolbarWindow) 並將父項設置爲JGWindowBase。
添加了從 V5到V6的映射模型。保存它。
將當前版本設置爲V6。
構建和調試。
我已經在Persistent Store Coordinator選項字典中打開了自動遷移。
的問題
得到一個錯誤 - 「多重驗證發生 錯誤。」
我設置了一個斷點並檢查了 驗證錯誤。有很長的 驗證錯誤列表 - 那裏 似乎是每個數據項的一個。
看來,它剝離了所有 的關係,因爲我的 屬性之一 - 應用 - 設置爲 需要,這算作一個 驗證錯誤。
如此看來,問題在於不能夠遷移 的關係......即使 明顯沒有已遠 的關係去改 遷移。
當我看到在〜/庫/應用程序支持 /我的應用程序的名稱/我看到那種有由.xml.new附加當 這個文件將在文本尋找同名 一個XML 數據存儲編輯,所有 關係確實已被剝離出 。
我已經試過
創建一個新的XML數據存儲和 把幾件作品在裏面,然後 重試。我爲每個項目獲得相同的 錯誤。
清潔和重建。
確保舊的.xml.new從 以前的驗證已被刪除,其中 已刪除。
刪除新的模型版本和 重複我的行動,以確保我 沒有搞砸了。
爲 中的每個 添加映射條目,默認情況下會忽略抽象類 。添加了所有 屬性和關係。還是 完全一樣的錯誤。
嘗試添加具有 JGWindowBase作爲父項的新實體 沒有一類,只是根據 NSManagedObject。再次, 失敗。
我能想到的唯一改變的是我在模型的基礎類中的一些內部邏輯。但這些都是微小的變化,我無法理解它是如何遷移的好,現在不是什麼都沒有改變。
我試過了一個全新的從最新的數據存儲遷移過來的遷移,並且有完全相同的問題。這意味着我必須解決這個問題,任何數據遷移工作。
錯誤
當我把一個斷點在presentError線以下
if (![persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType
configuration:nil
URL:url
options:options
error:&error]){
[[NSApplication sharedApplication] presentError:error];
}
並檢查錯誤用戶信息,我得到很多的錯誤是這樣的:
Error Domain=NSCocoaErrorDomain Code=1570 UserInfo=0x67ebfd0 "item is a required value."
po (NSArray *)0x67ebfd0
給出:
NSLocalizedDescription = "item is a required value.";
NSValidationErrorKey = item;
NSValidationErrorObject = <NSManagedObject: 0x45d5830> (entity: JGLogEntry; id: 0x4baccb0 <x-coredata://B597E13E-BE74-402E-BF00-5E1D57898406/JGLogEntry/p13942> ; data: {
duration = nil;
item = nil; // <<< Here's the problem.
processBundleID = nil;
processID = nil;
processName = nil;
startTime = 2009-10-09 16:41:44 +0100;
stopTime = 2009-10-09 16:42:17 +0100;
windowDocumentPathOrURL = nil;
windowID = nil;
windowTitle = nil;
這一切真的告訴我的是,它刪除連接到項目的關係,這是一個必需的屬性,它就是爲什麼它告訴我有驗證錯誤。應用程序也有整個負載,這是另一個必需的屬性。
正如我所看到的那樣,問題不在於驗證錯誤,因爲它似乎不會遷移任何關係在所有。
我把我的頭髮拉出來。我真的很感激一些幫助。最後,星球大戰報價:
「幫幫我,堆棧溢出。你是我的 唯一的希望。」
你真的能向我們展示一個驗證錯誤的例子嗎? – 2009-10-13 19:42:49
我的回憶是,涉及抽象基礎關係的映射很困難。確切的錯誤可能有助於指向正確的方向。 – 2009-10-13 19:43:48
感謝評論,巴里。我發佈了一些錯誤的東西。我只是不明白我如何能夠成功地遷移抽象基類的2/3倍,但沒有改變任何東西,它突然間就會對我產生影響。 – 2009-10-13 22:39:27