2013-06-12 219 views
0
NSMutableArray *arrayOfPredicates=[[NSMutableArray alloc]init]; 
[self.attendeeListSet enumerateObjectsUsingBlock:^(id obj, BOOL *stop){ 
    NSString *userId=[obj userId]; 
    [arrayOfPredicates addObject:[NSPredicate predicateWithFormat:@"userID == %@",userId]]; 
}]; 
NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:arrayOfPredicates]; 
[request setPredicate:compoundPredicate]; 

我正在爲一個數組中的多個userIds設置這個複合謂詞,我需要使用OR從這些用戶id獲取用戶。複合謂詞不工作

以上不工作,但是當我使用

NSPredicate *predicate1=[NSPredicate predicateWithFormat:@"(userID like[cd] %@) 
          OR (userID like[cd] %@)",@"sheetal2", @"sheetal3"]; 
[arrayOfPredicates addObject:predicate1]; 

現在,這是working..Can anyboady告訴硬編碼什麼我的代碼問題..

感謝

+0

這可能聽起來很傻,您正在使用用戶ID的第一個和其他的你正在起訴EVENTID? – Anupdas

+0

@Anupdas離開的ID ...什麼我是個說的是它不工作...我只是複製pasted..i已經Editted – sheetal

+1

當你發佈的問題,沒有留下任何餘地猜測。即使現在你的上面的查詢是區分大小寫的,第二個是不區分大小寫的?並且還會登錄'arrayOfPredicates'來查看他們的內容。 – Anupdas

回答

1

在謂詞使用的第一個代碼==。在第二個代碼中謂詞使用LIKE[cd]。因爲userIDNSString,所以使用LIKE通常是告訴謂詞比較值的更好方式,但真正的區別在於第二種方法是區分大小寫和區分變音不敏感,第一種方法需要精確匹配。

+0

你可以查看MartinR的評論[答](http://stackoverflow.com/a/16358617/767730)。我認爲使用'LIKE'並不總是最好的。 – Anupdas

+2

謝謝@Anupdas,我已經改進了答案,並且我從來沒有想過要做'== [cd]'之前的好信息。 – Wain

+0

@Wain遐我得到的答案...謝謝 – sheetal