4

我正在多次迭代中构建一个非常复杂的谓词,并希望立即在谓词中提供匹配值。

代替:

[NSPredicate predicateWithFormat:@"departmentName like[c] %@"];

我想要做:

NSString *str = [NSString stringWithFormat:@"departmentName like[c] '%@'", departmentName]; [NSPredicate predicateWithFormat:str];

由于这是一个愚蠢的替换,我想有可能通过输入垃圾意外地“破解”谓词。

我找不到任何可以“神奇地引用”我的价值的东西。

原因是,我需要在几次迭代中构建一个复杂的谓词,所以我必须构建一个大的谓词字符串。模板不适用于 SUBQUERY。所以我需要立即在字符串中提供值,因为我不想根据我对谓词格式有多少值进行 20 种不同的谓词初始化。

4

1 回答 1

10

直接使用NSComparisonPredicate,绕过谓词格式问题。

NSPredicate *fetchPredicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"departmentName"]
                                                                 rightExpression:[NSExpression expressionForConstantValue:searchTerm]
                                                                        modifier:NSDirectPredicateModifier
                                                                            type:NSLikePredicateOperatorType
                                                                         options:0];

阅读谓词编程指南“直接在代码中创建谓词”,并检查类参考NSComparisonPredicate

于 2010-06-20T03:03:23.383 回答