2013-08-05 8 views
6

Ich habe einige Probleme mit NSPredicatepredicateWithFormat:argumentArray:. In diesem Beispiel ist serverIDList Array von Zeichenfolgen. Ergebnisse ist ein Array von NSManagedObjects mit einem Attribut namens "flid", das eine Zeichenfolge ist.NSPredicate predicateWithFormat: argumentArray: Nur erstes Argument auswerten

NSMutableString *predicateString = [[NSMutableString alloc] init]; 

[predicateString appendString:@"(flid IN %@)"]; 

[results filterUsingPredicate:[NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList]]; 

Das Problem besteht darin, dass [NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList] wertet auf "FLID IN '2155'", was serverIDList nur der erste Wert des Feldes ist. Ich kann nicht scheinen, das Prädikat zu erhalten, um das gesamte Array zu bewerten. Fehlt hier etwas?

Danke!

Antwort

26
[NSPredicate predicateWithFormat:@"(flid IN %@)" argumentArray:serverIDList] 

entspricht

[NSPredicate predicateWithFormat:@"(flid IN %@)", id1, id2, ..., idN] 

wo id1, ..., idN die Elemente des Arrays werden serverIDList. Das sollte erklären, warum nur das erste Element ausgewertet wird.

Was möchten Sie wahrscheinlich ist

[NSPredicate predicateWithFormat:@"(flid IN %@)", serverIDList] 

Bemerkung: ich nicht erstellen Prädikate als Strings erste recomment würde. Die Chancen für quoting oder escape-Fehler sind ziemlich hoch. Verwenden Sie nur predicateWithFormat mit einer Konstantenformatzeichenfolge . Wenn Sie Prädikate zur Laufzeit dynamisch kombinieren müssen, verwenden Sie NSCompoundPredicate.

+0

Ahhh danke für die Erklärung! –