ios – 具有多个参数和“AND行为”的NSPredicate

ios – 具有多个参数和“AND行为”的NSPredicate,第1张

概述我有一个函数从特定实体中获取满足指定标准的那些对象: func fetchWithPredicate(entityName: String, argumentArray: [AnyObject]) -> [NSManagedObject] { let fetchRequest = NSFetchRequest(entityName: entityName) fetchReques 我有一个函数从特定实体中获取满足指定标准的那些对象:
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.

解决方法 要动态创建谓词(具有可变数量的表达式),请使用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所遇到的程序开发问题。

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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1109341.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-29
下一篇 2022-05-29

发表评论

登录后才能评论

评论列表(0条)

保存