在Objective C中使用NSPredicate过滤自定义对象的数组

时间:2017-07-05 12:03:16

标签: ios objective-c iphone nsmutablearray nspredicate

我有一个包含自定义对象字典的数组。我想在UITableView中过滤该数组以获取搜索功能。这是我使用NSPredicate进行单个对象过滤的代码。

self.searchResultForName = [self.multiPracticeDetailsArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    ObjectHolder *obj = (ObjectHolder*)evaluatedObject;
    return [obj.Name hasPrefix:searchText];
}]];

使用上面的代码,我只能搜索Name,但我想搜索By Name和ID。此外,搜索将不区分大小写。我怎么能在Objective-C中做到这一点?。请建议任何更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:2)

假设您的 ObjectId 属性为NSInteger,您可以尝试按此过滤:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"Name =[c] %@ OR ObjectId =[c] %ld", searchText, searchId];
NSArray *filteredArray = [self.multiPracticeDetailsArray filteredArrayUsingPredicate:predicate];

答案 1 :(得分:1)

您是否尝试使用|| OR运算符& lowercaseString。我没有检查过,只要给出一个try.plz,如果它有正确的语法。

self.searchResultForName = [self.multiPracticeDetailsArray filteredArrayUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(id evaluatedObject, NSDictionary *bindings) {
    ObjectHolder *obj = (ObjectHolder*)evaluatedObject;
    return [[obj.Name lowercaseString] hasPrefix:[searchText lowercaseString]] || [[obj.ID lowercaseString] hasPrefix:[searchText lowercaseString]] ;
}]];