2013-08-05 10 views
6

Ho qualche problema con NSPredicatepredicateWithFormat:argumentArray:. In questo esempio, serverIDList è una matrice di stringhe. I risultati sono un array di NSManagedObjects con un attributo chiamato "flid" che è una stringa.predicato NSPredicateWithFormat: argumentArray: Solo valutazione del primo argomento

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

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

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

Il problema è che [NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList] viene valutato come "IN Flid '2155'", che è solo il primo valore della matrice serverIDList. Non riesco a ottenere il predicato per valutare l'intero array. C'è qualcosa che manca qui?

Grazie!

risposta

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

è equivalente a

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

dove id1, ..., idN sono gli elementi della matrice serverIDList. Questo dovrebbe spiegare perché viene valutato solo il primo elemento.

Ciò che probabilmente quello che volete è

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

Nota: avrei recomment non per creare predicati come stringhe prima. Le probabilità che il quoting o gli errori di escape di siano piuttosto alti. Utilizzare solo predicateWithFormat con una stringa di formato costante . Se è necessario combinare i predicati dinamicamente in fase di esecuzione, utilizzare NSCompoundPredicate.

+0

Ahhh grazie per la spiegazione! –

Problemi correlati