ios - 具有多个参数和 "AND behaviour"的 NSPredicate

标签 ios swift

我有一个函数可以从满足指定条件的特定实体中获取这些对象:

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/

相关文章:

ios - 为 RSS Feed 实现拉动刷新

ios - 魔法记录排序错误

ios - 用于 iPhone 语音识别的 Shazam

swift - 在 swift 4.2 中从公共(public)枚举访问内部枚举时出错

ios - itemSize 没有使用 setCollectionViewLayout(toLayout, animated : true);

ios - App Thinning - 如果开发人员未提供所有 Assets ,它是如何工作的

ios - 从后台进入前台时无法显示admob插页式广告

ios - uitableview 滚动期间滞后

ios - 在 iOS (Swift) 的标签栏中隐藏标签

ios - 子类化 UIKit 类的最佳实践