[NSPredicate predicateWithFormat:@"(flid IN %@)" argumentArray:serverIDList]
equivalently
[NSPredicate predicateWithFormat:@"(flid IN %@)", id1, id2, ..., idN]
where id1 , ..., idN are the elements of the serverIDList array. This should explain why only the first element is evaluated.
What you might want is
[NSPredicate predicateWithFormat:@"(flid IN %@)", serverIDList]
Note. I would recommend not creating predicates as strings first. Chances for quotes or elusive mistakes are pretty high. Use only predicateWithFormat with a constant format string. If you need to combine predicates dynamically at run time, use NSCompoundPredicate .
source share