0

說我有這個數組謂詞的feedDays數組中:NSCompoundPredicate建設

<__NSArrayM 0x7ff7f3cd1040>(
    feedDay == 1, 
    feedDay == 2, 
    feedDay == 4 
) 

我需要並將其與此statusPredicates陣列:

<__NSArrayM 0x7ff7f3cd1070>(
    is_neutered == 0 AND other_status == 0, 
    is_neutered == 0 AND other_status == 1, 
    is_neutered == 0 AND other_status == 2, 
    is_neutered == 0 AND other_status == 3, 
) 

我怎樣才能將這些成一個查詢?我假設我必須使用NSCompoundPredicate,但我無法弄清楚如何將它與兩個謂詞數組放在一起。

回答

1

在我看來,一個聯合謂詞如

feedDay == 1 && feedDay == 2 ... 

總是假

因此你也許意思是每個謂詞與neutered條件,這樣既條件爲真(and)相結合,並結合這些單獨組,使這些要麼是真(or)。

如果您將數組與一個大的化合物結合成and,它肯定會始終爲假。假設neutered的條件總是相同的,

NSPredicate *finalPredicate = [NSCompoundPredicate andPredicateWithSubpredicates: 
    @[[NSPredicate predicateWithFormat:@"is_neutered = 0"], 
    [NSCompoundPredicate orPredicateWithSubPredicates:feedDays]]]; 

這很醜陋,對不對?所以,我建議你feedDay創建的可能值的數組,並使用簡單

[NSPredicate predicateWithFormat: 
    @"is_neutered = 0 && feedDay in %@", allowedFeedDays] 
+0

不錯的思想答案。 – Rog

-1

使用此代碼 -

NSMutableArray *allPredicates = [[NSMutableArray alloc] initWithArray:feedDays]; 
[allPredicates addObjectsFromArray:statusPredicates]; 

NSCompoundPredicate *finalPred = [NSCompoundPredicate andPredicateWithSubpredicates:allPredicates]; 
+0

這是不完全正確 - 它產生的樣子[A,B,C,[d,E,F數組]] not [a,b,c,d,e,f] - 將第二個數組全部添加到第一個數組中,而不是逐個添加其成員。 –

+0

EDITED。這對你有用嗎? – Nishant

+0

是的 - 現在返回與我的答案相同。雖然實際上現在我運行代碼,但你的原始答案是可以的 - 看起來NSCompoundPredicate足夠聰明,可以處理謂詞的嵌套數組了 - 道歉 –