2

我使用 UITextField 作为搜索字段:用户可以输入多个用逗号分隔的搜索值。通过键入,我想在我的 NSArray 中找到与搜索组件之一匹配的每个自定义对象。

我的自定义对象没有属性(可用于搜索)。接收我必须调用的值[myObject fieldForKey:@"username"].value;。因此,我必须使用[NSPredicate predicateWithBlock](或者其他方式对我来说是不可能的)。

我的搜索方法(每当文本字段中的字符发生更改时都会调用):

-(void)searchEntriesWithString:(NSString*)searchString {
    NSArray *dataSource = [NSArray arrayWithArray:_allObjects];

    searchString = [searchString stringByReplacingOccurrencesOfString:@" " withString:@""];

    NSArray *components = [searchString componentsSeparatedByString:@","];
    NSMutableArray *predicates = [NSMutableArray array];
    for (NSString *value in components) {
        NSPredicate *predicate = [NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {

        return ( [[(MyObject*)evaluatedObject fieldForKey:@"username"].wert hasPrefix:value ]);
        }];

        [predicates addObject:predicate];
    }

        NSPredicate *resultPredicate = [NSCompoundPredicate andPredicateWithSubpredicates:predicates];

    NSMutableArray searchResultArray = [NSMutableArray arrayWithArray:[dataSource filteredArrayUsingPredicate:resultPredicate]];
}

假设以下数据源:

  • 具有用户名“userA”的对象1
  • 具有用户名“userB”的对象2
  • 具有用户名“userC”的 Object3

使用 '[self searchEntriesWithString:@"userA,userB"]' 调用该方法应该会产生一个包含 Object1 和 Object2 的数组。

但我没有得到这个结果。

4

1 回答 1

3

由于您想要一个搜索组件,而不是所有搜索组件,我认为您应该使用:

NSPredicate *resultPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];

正如您所拥有的那样,使用andPredicateWithSubpredicates一个术语需要传递“userA”“userB”。

[我知道你三个月前问过这个问题,找到了解决办法,然后继续前进,但我想我会留下一个建议]

于 2013-05-24T14:30:59.463 回答