问题描述
我有一些麻烦使用
的第一个值。我似乎不能得到谓词来评估整个数组。
谢谢!
解决方案> [NSPredicate predicateWithFormat:@(flid IN%@)argumentArray:serverIDList]
等同于
[NSPredicate predicateWithFormat:@(flid IN%@),id1,id2, 。,idN]
其中 id1 .., idN 是数组 serverIDList 的元素。
这应该解释为什么只有第一个元素被评估。
你可能想要的是
[NSPredicate predicateWithFormat:@(flid IN%@),serverIDList]
$ b b
备注:我建议不要先将谓词创建为字符串。
引用或转义错误的机会相当高。只能使用
常量格式字符串使用 predicateWithFormat 。如果你必须在运行时动态合并谓词,
使用 NSCompoundPredicate 。
I'm having some trouble using NSPredicate predicateWithFormat:argumentArray:. In this example, serverIDList is array of strings. Results is an array of NSManagedObjects with an attribute named "flid" which is a string.
NSMutableString *predicateString = [[NSMutableString alloc] init]; [predicateString appendString:@"(flid IN %@)"]; [results filterUsingPredicate:[NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList]];
The problem is that [NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList] evaluates to "flid IN '2155'", which is only the first value of the array serverIDList. I can't seem to get the predicate to evaluate the entire array. Is there something missing here?
Thanks!
[NSPredicate predicateWithFormat:@"(flid IN %@)" argumentArray:serverIDList]
is equivalent to
[NSPredicate predicateWithFormat:@"(flid IN %@)", id1, id2, ..., idN]
where id1, ..., idN are the elements of the array serverIDList.That should explain why only the first element is evaluated.
What you probably want is
[NSPredicate predicateWithFormat:@"(flid IN %@)", serverIDList]
Remark: I would recomment not to create predicates as strings first. The chances forquoting or escaping errors are quite high. Use only predicateWithFormat with a constant format string. If you have to combine predicates dynamically at runtime,use NSCompoundPredicate.
这篇关于NSPredicate predicateWithFormat:argumentArray:仅评估第一个参数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!