0

我遇到了CoreData無法完成對象上的故障的問題。我認爲這是因爲該對象已被刪除,現在CoreData正試圖在某些情況下訪問某個屬性,並且無法將其置入。爲解決此問題,我試圖調用setRelationshipKeyPathsForPrefetching並將它傳遞給我想要預取的關係。核心數據預取不屬於屬性

示例中,我有一個實體A,它與實體B有多對多的關係,但是在我訪問實體B上的屬性時,實體B在另一個上下文中被刪除,現在出現故障不會被滿足。

[request setRelationshipKeyPathsForPrefetching:[NSArray arrayWithObjects:@"listOfBs", nil]]; 

我想,如果我這樣做,它會預取實體B這樣我就可以安全地調用它的屬性,但是這似乎並不如此。

編輯:我似乎無法找到任何有關此信息,但它必須是一個相當普遍的問題。如果某個上下文中有一個託管對象在另一個上下文中被刪除,應該有一些方法可以安全地發現該對象不再存在,而不僅僅是崩潰

編輯2:我不認爲CoreData正確地確認了我的預取請求。如果我調用setRelationshipKeyPathsForPrefetching,那麼即使在沒有錯誤的情況下,返回的對象也應該存在錯誤,但我可以簡單地打印出返回的對象並查看它們是否有錯誤。 CoreData是否不在多對多關係中預取對象?所以如果我有實體A並且我想要預取與A相關的所有B,我使用setRelationshipKeyPathsForPrefetching,但是我使用setRelationshipKeyPathsForPrefetching但是, B的所有屬性都沒有故障。

+0

您可以在發生這種情況時描述上下文嗎?你只有一個NSManagedContext,你總是在同一個線程? –

+0

我有多個線程/上下文。此外,我有多個觸摸數據庫的進程。肯定有我可以看到不再存在的東西的場景。 – JPC

+0

我不是用來在多個線程上使用CoreData,而是在多線程上進行修改時不鼓勵。知道在最新版本中,Appel進行了一些修改,使得處理多個線程變得更簡單,所以我最好猜測Appel Developer網站上的技術討論。 –

回答

0

找出解決方案。核心數據不允許從數據庫進行原子提取,因此如果預取關係後發生了某些情況,核心數據會引發錯誤。預取關係就是這樣,預取關係。但不是數據。解決方法是使用try/catch並刷新異常對象。