2013-08-05 10 views
6

Mam problemy z używaniem NSPredicatepredicateWithFormat:argumentArray:. W tym przykładzie serverIDList jest tablicą łańcuchów. Wyniki to tablica o wartości NSManagedObjects z atrybutem o nazwie "flid", który jest ciągiem znaków.NSPredicate predicateWithFormat: argumentArray: Tylko ocena pierwszego argumentu

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

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

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

Problemem jest to, że [NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList] ma wartość „flid W«2155»”, który jest tylko pierwsza wartość tablicy serverIDList. Nie mogę uzyskać predykatu do oceny całej tablicy. Czy czegoś tu nie ma?

Dzięki!

Odpowiedz

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

odpowiada

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

gdzie id1, ..., idN są elementy tablicy serverIDList. To powinno wyjaśnić, dlaczego oceniany jest tylko pierwszy element.

Co prawdopodobnie chcesz to

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

Uwagi: Ja polecam nie tworzyć ciągi predykaty jak pierwszy. Szanse na błędy w podawaniu lub unikaniu są bardzo wysokie. Używaj tylko predicateWithFormat ze stałym ciągiem formatu . Jeśli musisz połączyć predykaty dynamicznie w czasie wykonywania, użyj NSCompoundPredicate.

+0

Ahhh dzięki za wyjaśnienie! –