2011-08-28 28 views
0

工作時,此代碼謂詞分配給NSFetchRequest,對於具有實體上的兩個一對多關係(collectionA和collectionB):謂詞不會有兩個@count運營商

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"([email protected] > 0) OR ([email protected] > 0)" ]]; 

但是,斷言沒有按」 t工作,並選擇所有的對象。如果我更改了該行對這一另一個:

[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"[email protected] > 0" ]]; 

然後,它按預期工作,並將其與collectionA至少一個項目將返回所有對象。 collectionB也一樣。但是,當我嘗試使用OR操作來獲得兩者的組合時,它不會篩選任何對象,就像謂詞被忽略一樣。

我確定我做錯了什麼,也許兩個@count操作符不能用在同一個謂詞中。我該如何編寫一個謂詞才能獲得包含collectionA或collectionB中任何項目的對象的結果?

在此先感謝。

+0

如果每個對象都有至少一個通過'collectionA'或'collectionB'關聯的對象,那麼謂詞將始終評估爲'YES',並且所有內容都將被提取。 –

+0

當然戴夫,但事實並非如此。並非所有對象都通過collectionA或collectionB關係。這就是我認爲這是一個罕見的謂詞行爲。 – Gabriel

回答

1

我知道沒有理由爲什麼兩個@count集合操作符不能在同一個謂詞中運行。有時候,您遇到了predicateWithFormat的奇怪問題。我建議建立兩個獨立的謂語,然後將它們相結合:

-[NSCompoundPredicate orPredicateWithSubpredicates]; 

...創建複合謂語,而不是直接依靠解析器通常能解決這類問題。

但是,您確實需要確保您確實具有兩個關係爲空的對象,因爲您構建的謂詞將返回具有一個或多個對象的所有託管對象。

+0

謝謝,我將使用該系統。但是predicateWithFormat非常容易,另一個形式非常詳細,我會繼續調查爲什麼會發生這種奇怪的行爲。 – Gabriel

+0

'predicateWithFormat'是一種方便的方法,我在90%的時間使用它,但它必須解析,有時它似乎失敗了,並且手工創建謂詞是必需的。 – TechZen