2

さまざまなプロパティを持つさまざまな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'

これを行うことは可能ですか?

4

1 に答える 1

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];
于 2012-08-09T20:00:59.060 に答える