8

我在使用NSPredicate predicateWithFormat:argumentArray:. 时遇到了一些麻烦。在此示例中,serverIDList是字符串数组。NSManagedObjects结果是一个具有名为“flid”的属性的数组,该属性是一个字符串。

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

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

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

问题是[NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList]计算结果为“flid IN '2155'”,这只是数组的第一个值serverIDList。我似乎无法让谓词来评估整个数组。这里有什么遗漏吗?

谢谢!

4

1 回答 1

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

相当于

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

其中id1, ...,idN是数组的元素serverIDList。这应该可以解释为什么只评估第一个元素。

你可能想要的是

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

备注:我建议不要先将谓词创建为字符串。引用或转义错误的机会非常高。仅predicateWithFormat与常量格式字符串一起使用。如果您必须在运行时动态组合谓词,请使用NSCompoundPredicate.

于 2013-08-05T13:25:22.513 回答