我正在使用UITextField作为搜索字段:用户可以输入以逗号分隔的多个搜索值。通过键入我想在我的NSArray中找到与搜索组件之一匹配的每个自定义对象。
我的自定义对象没有属性(可用于搜索)。接收值我必须致电[myObject fieldForKey:@"username"].value;
。因此,我必须使用[NSPredicate predicateWithBlock]
(或者我不可能采用其他方式)。
我的搜索方法(将在TextField中更改字符时调用):
-(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]];
}
假设有以下dataSource:
使用'[self searchEntriesWithString:@“userA,userB”]'调用方法应该生成一个包含Object1和Object2的数组。
但我没有得到这个结果。
答案 0 :(得分:3)
由于你想要一个的搜索组件,而不是所有的搜索组件,我认为你应该使用过:
NSPredicate *resultPredicate = [NSCompoundPredicate orPredicateWithSubpredicates:predicates];
正如你使用andPredicateWithSubpredicates
一样,一个术语需要传递给“userA”和“userB”。
[我意识到你在三个月前问过这个问题,找到了一个工作,并继续前进,但我想我会留下一个建议]