如何使用NSPredicate使用多文本查询搜索文本?

时间:2015-01-23 04:06:26

标签: ios objective-c iphone nspredicate

我试图通过多个值执行查询。 不幸的是,我无法使用ANY运算符,因为我已经执行了CONTAINS操作。

例:

Obj *foo1 = [Obj objectWithName:@"John" age:42];
Obj *foo2 = [Obj objectWithName:@"Elizabeth" age:21];
Obj *foo3 = [Obj objectWithName:@"Albert" age:17];
Obj *foo4 = [Obj objectWithName:@"Marty" age:54];

NSArray *query = @[@"Joh", @"lizabe", @"arty"];

//此查询应返回foo1foo2foo4

我尝试了类似但不起作用的事情:

[NSPredicate predicateWithFormat:@"(name CONTAINS[cd]) IN %@, query];

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

NSMutableArray *filterArray = [NSMutableArray array];
NSArray *query = @[@"Joh", @"lizabe", @"arty"];
for (NSString *string in query)
{
     [filterArray addObjectsFromArray:[mainArray filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"name CONTAINS[cd] IN %@", string]]];
}

此处 mainarray 是包含数组的对象。

或尝试这个..

    NSMutableArray *filterArray = [NSMutableArray array];
    NSMutableArray *predicateArray = [NSMutableArray array];
    NSArray *query = @[@"Joh", @"lizabe", @"arty"];
    for (NSString *string in query)
         [predicateArray addObject:[NSPredicate predicateWithFormat:@"name CONTAINS[c] %@", string]];

   NSPredicate *compoundpred = [NSCompoundPredicate andPredicateWithSubpredicates:predicateArray];
[filterArray addObjectsFromArray:[mainArray filteredArrayUsingPredicate:compoundpred];

我希望这会对你有所帮助......