2010-06-19 26 views
2

我在幾次迭代中構建了一個非常複雜的謂詞,並且希望在謂詞中立即提供匹配值。如何防止核心數據中的「SQL注入」?

相反的:

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

我想做的事:

的NSString *海峽= [的NSString stringWithFormat:@ 「DEPARTMENTNAME像[C] '%@'」,DEPARTMENTNAME]。 [NSPredicate predicateWithFormat:str];

由於這是一個愚蠢的替代,我猜有可能通過輸入垃圾來無意中「破解」這個謂詞。

我找不到任何會「神奇地引用」那些對我有價值的東西。

原因是,我需要在幾次迭代中建立一個複雜的謂詞,所以我必須構造一個大的謂詞字符串。模板不適用於SUBQUERY。所以我需要在字符串中立即提供值,因爲我不想做20個不同的謂詞初始化,這取決於我對謂詞格式有多少個值。

回答

8

直接使用NSComparisonPredicate,並繞過謂詞格式問題。

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

有通過Predicate Programming Guide讀「創建謂詞直接在代碼中」,併爲您NSComparisonPredicate

類參考