如何按特定字段过滤对象数组?
我的代码:
NSMutableArray *inputArray = [[NSMutableArray alloc]init];
Person *person = [[Person alloc]init];
person.first_name = @"John";
[inputArray addObject: person];
person = [[Person alloc]init];
person.first_name = @"Jack";
[inputArray addObject: person];
NSString *expression = [NSString stringWithFormat:@"SUBQUERY(inputArray, $object, $object.first_name CONTAINS[c] J"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:expression];
NSMutableArray *filteredArray = [[inputArray filteredArrayUsingPredicate:predicate]mutableCopy];
NSLog(@"Count should be 2: %lu",(unsigned long)filteredArray.count);
这是我得到的错误:
'NSInvalidArgumentException', reason: 'Unable to parse the format string "SUBQUERY(inputArray, $object, $object.first_name CONTAINS[c] J"'
这是一个用于测试的基本示例。实际情况是我有一个对象数组(人或其他),我想通过对象中的某些字段过滤该数组,即 first_name。当用户键入时,我们将根据他们键入的内容过滤一个可视列表 - 因此键入“J”会产生 2 个结果,但是当他们键入“Jo”时,列表中只会出现“John”。
我做错了什么?
编辑
似乎还是不行。更新代码:
DOVisitor *vi = [inputArray objectAtIndex:0];
NSLog(@"NAME: %@",vi.first_name);
NSPredicate *firstNamePredicate=[NSPredicate predicateWithFormat:@"first_name LIKE[cd] %@", @"Jo"];
NSPredicate *lastNamePredicate =[NSPredicate predicateWithFormat:@"last_name LIKE[cd] %@", @"Jo"];
NSPredicate *finalPredicate = [NSCompoundPredicate orPredicateWithSubpredicates : @[firstNamePredicate, lastNamePredicate]];
NSArray *filteredArray = [[inputArray filteredArrayUsingPredicate:finalPredicate]mutableCopy];
NSLog(@"Count should be 1: %d", [filteredArray count]);
我得到一个空数组。但是,当我打印 inputArray 的第一个对象时,控制台会记录“John”
编辑
使用 CONTAINS 而不是 LIKE 就可以了
最佳答案
你不需要子查询,这是一个非常基本的过滤器。
NSPredicate * predicate = [NSPredicate predicateWithFormat:@"first_name CONTAINS[cd] %@", @"j"];
关于ios - NSPredicate如何过滤对象字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25331065/