HTML5   发布时间:2022-04-27  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了ios – 具有多个参数和“AND行为”的NSPredicate大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个函数从特定实体中获取满足指定标准的那些对象:
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]()
     }

}

当我传递一个包含多个aguments(多个属性名称和值)的数组时,似乎会创建一个这样的查询

attributename1 = value1 OR attributename2 = value2 OR attributename3 = value3 OR...

我想为AND更改这些OR.

编辑:

问题是它只有replacing the first two items,“%K ==%@”.

所以,我必须创建一个NSCompoundPredicate to create a predicate dynamically.

解决方法

要动态创建谓词(具有可变@L_616_13@的表达式),请使用NSCompoundPreDicate,例如
let preDicate = NSCompoundPreDicate(andPreDicateWithSubpreDicates: subPreDicates)

其中subPreDicates是[NSPreDicate]数组,每个subpreDicate
是从循环中提供的参数创建的

NSPreDicate(format: "%K == %@",key,value)

像这样(未经测试):

func fetchWithPreDicate(entityName: String,argumentArray: [NSObject])  -> [NsmanagedObject]  {

    var subPreDicates : [NSPreDicate] = []
    for i in 0.Stride(to: argumentArray.count,by: 2) {
        let key = argumentArraY[i]
        let value = argumentArraY[i+1]
        let subPreDicate = NSPreDicate(format: "%K == %@",value)
        subPreDicates.append(subPreDicatE)
    }

    let fetchrequest = NSFetchrequest(entityName: entityName)
    fetchrequest.preDicate = NSCompoundPreDicate(andPreDicateWithSubpreDicates: subPreDicates)

    // ...
}

大佬总结

以上是大佬教程为你收集整理的ios – 具有多个参数和“AND行为”的NSPredicate全部内容,希望文章能够帮你解决ios – 具有多个参数和“AND行为”的NSPredicate所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。