NSPredicate predicateWithFormat:argumentArray:仅评估第一个参数

Gab*_*ega 6 core-data nspredicate ios

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

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

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

[results filterUsingPredicate:[NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList]];
Run Code Online (Sandbox Code Playgroud)

问题是[NSPredicate predicateWithFormat:predicateString argumentArray:serverIDList]评估为"flid IN'2155'",这只是数组的第一个值serverIDList.我似乎无法获得谓词来评估整个数组.这里有什么东西不见了吗?

谢谢!

Mar*_*n R 26

[NSPredicate predicateWithFormat:@"(flid IN %@)" argumentArray:serverIDList]
Run Code Online (Sandbox Code Playgroud)

相当于

[NSPredicate predicateWithFormat:@"(flid IN %@)", id1, id2, ..., idN]
Run Code Online (Sandbox Code Playgroud)

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

你可能想要的是什么

[NSPredicate predicateWithFormat:@"(flid IN %@)", serverIDList]
Run Code Online (Sandbox Code Playgroud)

备注:我建议不要先将谓词创建为字符串.引用或逃避错误的可能性非常高.仅predicateWithFormat用于常量格式字符串.如果必须在运行时动态组合谓词,请使用NSCompoundPredicate.