2012-10-10 65 views
2

我要篩選根據的是與一些字符串開頭firstNamelastNameUser對象(User具有fullnameuser_id有的多個屬性..)的陣列。
我知道如何根據一個條件篩選:濾波器的NSArray與NSPredicate

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word]; 
NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate]; 

這會給我的一切,有一個以「word」開始將firstname用戶。
但是如果我想要所有具有以「word」開頭的firstName或lastName的用戶呢?

回答

6

您可以使用類NSCompoundPredicate來創建複合謂詞。

NSPredicate *firstNamePred = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word]; 
NSPredicate *lastNamePred = [NSPredicate predicateWithFormat:@"lastName BEGINSWITH[cd] %@", word]; 

NSArray *predicates = @[firstNamePred, lastNamePred]; 

NSPredicate *compoundPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates]; 

NSArray* resArr = [myArray filteredArrayUsingPredicate:compoundPredicate]; 

這是我喜歡做的一種方式。

或者你也可以做......

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@ OR lastName BEGINSWITH[cd] %@", word, word]; 
NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate]; 

要麼將​​工作。

+0

使用複合謂語,我不工作的一些原因。但使用subPredicates單獨工作。任何想法可能會發生。 – pnizzle

2

使用這樣的:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH %@ OR lastName BEGINSWITH %@", word, word]; 
NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate];