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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)