2014-03-19 52 views
0

我試圖表達與謂詞的搜索參數:的iOS:NSPredicate不起作用正確

NSPredicate *predicate=[NSPredicate predicateWithFormat:@"name CONTAINS [cd] %@ OR code CONTAINS [cd] %@ OR currency CONTAINS [cd] %@ AND continent.paid == %@",searchString,searchString,searchString,[NSNumber numberWithBool:YES]]; 

我試圖表達的可能字符串的記錄搜索參數只在continent.paid == YES。問題是最後一個表達式被忽略。搜索從continent.paid == NO返回數據以及正確的數據。它出什麼問題了?

回答

2

你必須設置括號:

[NSPredicate predicateWithFormat:@"(name CONTAINS [cd] %@ OR code CONTAINS [cd] %@ OR currency CONTAINS [cd] %@) AND continent.paid == %@", 
     searchString,searchString,searchString,[NSNumber numberWithBool:YES]]; 

據我所知,「AND」和「OR」有一個謂語相同的優先級,並進行評估 由左到右。因此,在您的代碼中,如果「CONTAINS」表達式中的一個 爲真,則謂詞的計算結果爲true

+0

哦,耶穌,容易的蛋糕。只是括號問題。感謝Martin。 7分鐘後會接受你的答案。 – NCFUSN