2012-12-01 65 views
7

將iOS 6.0.1上的Core Data託管對象上下文保存到SQLite存儲時,遇到了奇怪的「CoreData不支持持久交叉存儲關係「例外。它涉及模型中引號和AbstractSources之間的一對一關係。在運行時,它涉及報價和預訂儘管與x-coredata ID匹配,「CoreData不支持持續的跨商店關係」

我研究類似的報告,涵蓋了報道的原因(如圖書從AbstractSource繼承一切運作良好的模型編輯器。):

  1. 我分配使用assignObject:toPersistentStore:來存儲同一個持續的 商店,因此,兩個都不會保留 未分配。
  2. 錯誤描述表明,所有的 「絕對」 X-coredata IDS開始 具有相同前綴(如 「X-coredata:// 82B3BEB3-60F2-4912-AC80-11AAD29CFF99 /」,所以 似乎真的是一個商店只在使用

我的問題是:。

  1. 還有什麼事我得查(也許SG相對於 AbstractSource,我不觸摸/控制我的來源?我是 創建報價和書籍機智h呼叫 initWithEntity:insertIntoManagedObjectContext)
  2. 我注意到錯誤描述還包括幾個 「相對」x-coredata ID(形式爲「x-coredata:/// ...」)。可能 它是絕對形式始終被視爲 「跨數據庫」,即使「絕對」前綴(請參見上面的示例)是相同的嗎? 如果是這樣,我怎麼能影響「絕對」和 「相對」x-coredata ID之間的任何選擇?

Thx(much)for your attention!

+0

+1是一個很好寫的問題。 –

+0

x-coredata:// 82B3BEB3-60F2-4912-AC80-11AAD29CFF99/=尚未保存的對象的臨時標識 –

+0

@ Daij-Djan thx(Danke)的澄清。我仍然認爲id(82B3BEB3-60F2-4912-AC80-11AAD29CFF99)指出在保存時將使用哪個持久存儲,Quote和Bock的ID都相同。 – Drux

回答

0

因此,這是有(大概)造成的麻煩:

  1. 我的管理對象方面的協調需要管理兩個持久 店。現在,我分配報價和書籍,我是 希望他們保存是在啓動時重置。此代碼中存在一個缺陷 ,這使該商店無法使用。由於第二個 可用,它靜靜地接管,在這種情況下導致不希望的結果。 課程:我現在斷言在設置核心數據堆棧之後確實存在/確實存在兩個存儲。
  2. 在我的核心數據模型的早期開發中,我已經在模型編輯器中將其實體的一些 重命名。由於錯誤,我只更改了 名稱,但沒有更改實體類屬性。因此,雖然 在模型編輯器中一切運行良好,但在運行時使用了類似的 類,因此在意外/錯誤的存儲中也使用了類別 。課程:我現在確保 實體名稱及其類屬性保持完美同步(其他 情況允許)。

現在已經解決了該問題,並且我還重構了我的代碼/模型以使用(非重疊)configurations而不是顯式分配,這也有助於繼續前進。

再次,thx爲您的注意力