我有大量不同的NSObject类型都具有不同的属性,我试图抽象出一个方法,允许我通过简单地传入我希望过滤的NSArray属性来过滤对象的NSArray.我过滤的数字键可能从1到不等.
以下是过滤NSArray的示例
Run Code Online (Sandbox Code Playgroud)NSArray *filterBy = [NSArray arrayWithObjects: @"ManufacturerID", @"CustomerNumber",nil];
这些键也存在于我正在过滤的NSArray的对象中,所以基本上这需要生成这样的东西:
Run Code Online (Sandbox Code Playgroud)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'
是否有可能做到这一点?
这很简单.看看这个:
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];
Run Code Online (Sandbox Code Playgroud)