如何防止核心数据中的"SQL注入"?

don*_*ile 3 iphone core-data nspredicate

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

代替:

[NSPredicate predicateWithFormat:@"departmentName like[c] %@"];
Run Code Online (Sandbox Code Playgroud)

我想要做:

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

由于这是一个愚蠢的替代,我想通过输入垃圾可能会意外地"破解"谓词.

我找不到任何能够"神奇地引用"这个价值的东西.

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

ohh*_*rob 9

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

NSPredicate *fetchPredicate = [NSComparisonPredicate predicateWithLeftExpression:[NSExpression expressionForKeyPath:@"departmentName"]
                                                                 rightExpression:[NSExpression expressionForConstantValue:searchTerm]
                                                                        modifier:NSDirectPredicateModifier
                                                                            type:NSLikePredicateOperatorType
                                                                         options:0];
Run Code Online (Sandbox Code Playgroud)

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