Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 使用NSPredicate筛选NSArray_Iphone_Objective C_Ios_Nsarray_Nspredicate - Fatal编程技术网

Iphone 使用NSPredicate筛选NSArray

Iphone 使用NSPredicate筛选NSArray,iphone,objective-c,ios,nsarray,nspredicate,Iphone,Objective C,Ios,Nsarray,Nspredicate,我想根据以某个字符串开头的firstName或lastName筛选User对象数组(User具有fullname、User\u id和其他一些属性..)。 我知道如何根据一个条件进行过滤: NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word]; NSArray* resArr = [myArray filteredArrayUsingPredicate:pre

我想根据以某个字符串开头的
firstName
lastName
筛选
User
对象数组(
User
具有
fullname
User\u id
和其他一些属性..)。
我知道如何根据一个条件进行过滤:

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"firstName BEGINSWITH[cd] %@", word];
NSArray* resArr = [myArray filteredArrayUsingPredicate:predicate];  
这将为我提供所有名字以“word”开头的用户。

但是,如果我希望所有的用户的名字或姓氏都以“word”开头,那该怎么办呢?

您可以使用类
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];
这两种方法都可以使用。

如下所示:

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

由于某种原因,使用复合谓词对我不起作用。但单独使用次级信用卡是可行的。知道会发生什么吗。