我正在多次迭代中构建一个非常复杂的谓词,并且希望立即在谓词中提供匹配值。
而不是:
[NSPredicate predicateWithFormat:@"departmentName like[c] %@"];
我想做:
NSString *str = [NSString stringWithFormat:@"部门名称如[c] '%@'", 部门名称]; [NSPredicate predicateWithFormat:str];
由于这是一个愚蠢的替换,我想有可能通过输入垃圾来意外“破解”谓词。
我找不到任何可以为我“神奇地引用”该值的东西。
原因是,我需要在多次迭代中构建一个复杂的谓词,所以我必须构造一个大的谓词字符串。模板不适用于 SUBQUERY。因此,我需要立即在字符串中提供值,因为我不想根据谓词格式有多少个值来进行 20 个不同的谓词初始化。
最佳答案
直接使用NSComparisonPredicate
,绕过谓词格式问题。
NSPredicate *fetchPredicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"departmentName"]
rightExpression:[NSExpression expressionForConstantValue:searchTerm]
modifier:NSDirectPredicateModifier
type:NSLikePredicateOperatorType
options:0];
阅读 Predicate Programming Guide “直接在代码中创建谓词”,并检查 NSComparisonPredicate
的类引用
关于iphone - 如何防止Core Data中出现 "SQL Injection"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3076894/