我想使用NSArray
方法过滤NSPredicate predicateWithFormat:
。我有一些变量,我想在这种格式中使用几次。我不想写好几遍。下面是一个示例:
NSString *someText = @"some text";
NSString *str = [NSString stringWithFormat:
@"(field1 CONTAINS[cd] %1$@) OR (field2 CONTAINS[cd] %1$@)", someText];
NSLog(@"%@", str);
// prints : (field1 CONTAINS[cd] some text) OR (field2 CONTAINS[cd] some text)
所以它适用于NSString stringWithFormat:
有人能解释为什么不能用处理NSPredicate predicateWithFormat:
,以及如何修复它吗?
[someArray filteredArrayUsingPredicate:
[NSPredicate predicateWithFormat:
@"(field1 CONTAINS[cd] %1$@) OR (field2 CONTAINS[cd] %1$@)",
someText]];
我收到这一例外:
由于“NSInvalidArgumentException”异常终止应用程序,原因:“无法解析格式字符串"(field1 CONTAINS[cd] %1$@) OR (field2 CONTAINS[cd] %1$@)"'
”
提前感谢
发布于 2014-08-07 15:49:18
NSPredicate
解析器不接受位置说明符,可能是因为用于声明变量的$
符号。顺便说一下,使用变量可以解决你的问题。
NSString *someText = @"some text";
NSPredicate *predicate = [NSPredicate predicateWithFormat:
@"(field1 CONTAINS[cd] $someText) OR (field2 CONTAINS[cd] $someText)"]];
NSDictionary *varSub = [NSDictionary dictionaryWithObject:someText forKey:@"someText"];
NSPredicate *filterPredicate = [predicate predicateWithSubstitutionVariables:varSub];
虽然它可能不会比重新键入变量名短得多.
发布于 2014-08-07 15:31:09
更新
将一个文字字符串作为参数传递给-predicateWithFormat:
,而不是
[NSString stringWithFormat:@"(field1 CONTAINS[cd] %1$@) OR (field2 CONTAINS[cd] %1$@)", someText];
原创
您的-stringWithFormat:
调用提供了一个格式字符串,其中包含两个占位符,但您只提供了一个值。
https://stackoverflow.com/questions/25186200
复制相似问题