我在使用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
的第一个值。我似乎无法获得谓词来评估整个数组。这里有什么东西不见了吗?
谢谢!
答案 0 :(得分:26)
[NSPredicate predicateWithFormat:@"(flid IN %@)" argumentArray:serverIDList]
相当于
[NSPredicate predicateWithFormat:@"(flid IN %@)", id1, id2, ..., idN]
其中id1
,...,idN
是数组serverIDList
的元素。
这应该解释为什么只评估第一个元素。
你可能想要的是
[NSPredicate predicateWithFormat:@"(flid IN %@)", serverIDList]
备注:我建议不首先将谓词创建为字符串。的机会
引用或逃避错误是非常高的。仅使用predicateWithFormat
和
常量格式字符串。如果必须在运行时动态组合谓词,
使用NSCompoundPredicate
。