我有一个函数可以从满足指定条件的特定实体中获取这些对象:
func fetchWithPredicate(entityName: String, argumentArray: [AnyObject]) -> [NSManagedObject] {
let fetchRequest = NSFetchRequest(entityName: entityName)
fetchRequest.predicate = NSPredicate(format: "%K == %@", argumentArray: argumentArray)
do {
return try self.managedContext.executeFetchRequest(fetchRequest) as! [NSManagedObject]
} catch {
let fetchError = error as NSError
print(fetchError)
return [NSManagedObject]()
}
}
当我传递一个包含多个参数(多个属性名称和值)的数组时,它似乎创建了一个这样的查询:
attributeName1 = value1 OR attributeName2 = value2 OR attributeName3 = value3 OR...
我想将这些 OR 更改为 AND。
编辑:
问题是它只有 replacing the first two items用“%K == %@”。
所以,我必须创建一个 NSCompoundPredicate to create a predicate dynamically .
最佳答案
在您的示例中,%K
和 %@
格式标记被替换为参数数组的前两项仅,另一个项目被忽略。
例如,您必须提供要在字符串中替换的所有格式标记
NSPredicate(format: "%K == %@ AND %K == %@", argumentArray:["key1", "value1", "key2", "value2"])
关于ios - 具有多个参数和 "AND behaviour"的 NSPredicate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34202239/