【发布时间】:2016-07-01 02:58:46
【问题描述】:
是否可以通过命名而不是%@来将多个参数传递给NSPredicate
例如,我有一个directly-passed 参数me 和you。
public static func ConversationByUserId( userId : String ) -> [Message] {
// Either Created By me and sent to you.
// Or, created by you and sent to me
let me = UserRepo.GetLoggedInUser()?.id
var format = "( createdBy == '" + me! + "' && createdTo == '" + userId + "') "
format += " || ( createdBy == '" + userId + "' && createdTo == '" + me! + "') "
print(format)
//prints: ( createdBy == '1' && createdTo == '5') || ( createdBy == '5' && createdTo == '1')
let predicate = NSPredicate(format: format)
return Filter(predicate);
}
注意:Filter(predicate) 执行操作并返回结果。到现在为止还挺好。我得到了预期的结果。但我猜这可能会出现 SQL 攻击之类的问题。
我可以像下面这样做吗:如果可以,怎么做?
var format = "( createdBy == @me && createdTo == @you ) "
format += " || ( createdBy == @you && createdTo == @me ) "
let predicate = NSPredicate(format: format, [ "me" : me, "you" : you ])
目前我取得的成就是:
format = "( createdBy == %@ && createdTo == %@ ) "
format += " || ( createdBy == %@ && createdTo == %@ ) "
let predicate = NSPredicate(format: format, me!, you, me!, you)
【问题讨论】:
-
这个答案和其他人谈论使用 NSComparisonPredicate 防止 SQL 注入:stackoverflow.com/questions/3076894/…
-
@Moshe,对我来说没有意义。如果您知道,请迅速发布答案?
标签: ios swift core-data nspredicate