我想NSArray
使用usingNSPredicate 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$@)"'
提前致谢
该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];
尽管它可能比重新键入变量名称短很多...
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句