从NSArray动态生成NSPredicate

时间:2012-08-09 18:29:29

标签: ios nspredicate

我有大量不同的NSObject类型,它们都有不同的属性,我试图抽象出一个方法,它允许我通过简单地传入我希望过滤的NSArray属性来过滤对象的NSArray上。我过滤的数字键从可能的1到不等。

以下是过滤NSArray

的示例
NSArray *filterBy = [NSArray arrayWithObjects:
                       @"ManufacturerID",
                       @"CustomerNumber",nil];

这些键也存在于我正在过滤的NSArray的对象中,所以基本上这需要生成这样的东西:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"%K == %@ AND %K == %@",
                       [filterBy objectAtIndex:0], 
                       [items valueForKey: [filterBy objectAtindex:0],
                       [filterBy objectAtIndex:1], 
                       [items valueForKey: [filterBy objectAtIndex:1]];

会产生类似:ManufacturerID==18 AND CustomerNumber=='WE543'

的内容

有可能这样做吗?

1 个答案:

答案 0 :(得分:9)

这很容易。看看:

NSMutableArray *subpredicates = [NSMutableArray array];
for (NSString *filterKey in filterBy) {
  NSString *filterValue = [items valueForKey:filterKey];
  NSPredicate *p = [NSPredicate predicateWithFormat:@"%K = %@", filterKey, filterValue];
  [subpredicates addObject:p];
}
NSPredicate *final = [NSCompoundPredicate andPredicateWithSubpredicates:subpredicates];