2 Stimmen

Dynamisch NSPredicate aus einem NSArray generieren

Ich habe eine große Anzahl verschiedener NSObject-Typen, die alle unterschiedliche Eigenschaften haben, und ich versuche, eine einzige Methode abstrakt zu gestalten, die es mir ermöglicht, die NSArrays der Objekte zu filtern, indem ich einfach ein NSArray von Eigenschaften übergebe, nach denen ich filtern möchte. Die Anzahl der Schlüssel, nach denen ich filtere, kann von 1 bis beliebig variieren.

Hier ist ein Beispiel für das Filter-NSArray

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

Diese Schlüssel existieren auch in den Objekten meines filternden NSArrays, daher müsste dies im Grunde genommen etwas wie das folgende generieren:

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

Was etwas wie ManufacturerID==18 AND CustomerNumber=='WE543' generieren würde

Ist es möglich, dies zu tun?

9voto

Dave DeLong Punkte 240835

Dies ist einfach. Überprüfen Sie es:

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 Stimmen

Toll - Ich wusste, dass es etwas geben musste, das ich nutzen kann!

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X