2012-08-09 77 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