2012-08-09 78 views
2

我有大量不同的NSObject类型,都具有不同的属性,我想抽象出一个单一的方法,这将允许我过滤NSArrays的对象只需传入一个NSArray我希望过滤的属性。我过滤的数字键可能从1到任何不同。从NSArray动态生成NSPredicate

这里是滤波的实例的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'

可以做到这一点吗?

回答

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]; 
+0

真棒 - 我知道必须有这样的东西给我使用! – Slee 2012-08-10 02:26:04

+0

正是我在找的东西。谢谢 – aryaxt 2013-12-29 03:39:55