gpt4 book ai didi

ios - NSPredicate 格式

转载 作者:行者123 更新时间:2023-11-29 10:39:33 26 4
gpt4 key购买 nike

我想使用 NSPredicate predicateWithFormat: 方法过滤 NSArray。我有一些变量,我想以这种格式多次使用。不想多写几遍。这是一个例子:

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];

虽然这可能不会比重新输入变量名短多少...

关于ios - NSPredicate 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186200/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com