2010-05-12 197 views
1

我有一個多對多關係的數據模型,如EntityA <-->> EntityB <<--> EntityC。我曾經用不同的搜索條件查詢EntityA,我使用NSCompoundPredicateNSPredicate的數組。在其中一個謂詞中,我想用EntityC查詢EntityA。我試圖使用以下SUBQUERY,但它沒有奏效。核心數據多對多關係NSPredicate

searchPredicate=[NSPredicate predicateWithFormat:@"(0 != SUBQUERY(EntityB, $B, (0 != SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@)[email protected]))[email protected])", name] 

而且我得到以下異常,

 
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 
'Can't perform collection evaluate with non-collection object.' 

有什麼我失蹤。我將不勝感激任何幫助。

薩拉

回答

3

(我有很多的麻煩令人費解了你的謂語所以藉此與一粒鹽。)

我認爲你使這個過於複雜。你應該簡化keypaths。每個實體B與實體C具有一對一的關係,因此在EntityB對象上搜索所有你需要做的就是檢查EntityB.entityCRelationshipName.entityCAttribute。因此,像:

ALL B.EntityC.name like %@ 

在任何情況下,(如果我正確讀謂語)這樣的:

SUBQUERY($B.EntityC, $EntityC, $EntityC.name like %@) 

只能返回集合的單個對象來代替。因此,謂詞將無法對它進行計數。這就是你的錯誤信息的含義。

我建議在數據模型編輯器中使用謂詞編輯器在存儲它們之前散列謂詞。

+0

謝謝你的回覆,我已經使用過你的方法,但得到了以下異常***由於未捕獲的異常'NSInvalidArgumentException',原因:'不支持的謂詞ALL B.EntityC.name LIKE「name」'和I使用謂詞編輯器來構建它。 – Sarah 2010-05-13 07:54:37

+1

嘗試使用'ANY entityB.entityC.name LIKE [c] $ aName'並提供「aName」變量。確保您的關係名稱與實體名稱不完全相同。 – TechZen 2010-05-13 12:25:51

+0

ANY entityB.entityC.name LIKE [c] $ aName工作得很好,謝謝 – Sarah 2010-05-13 13:06:19