在 NSPredicates 上结合“And”和“Or”
Posted
技术标签:
【中文标题】在 NSPredicates 上结合“And”和“Or”【英文标题】:Combining "And" and "Or" on NSPredicates 【发布时间】:2016-05-15 01:35:50 【问题描述】:我想做这样的事情:
NSPredicate(format: "name contains[cd] %@ AND (position == %@ OR position == %@), name, position1, position2)
但是,我已经尝试过了,但我不断收到严重的 Core Data 应用程序错误。然后我尝试使用 NSCompoundPredicate,但我也不能在那里组合“AND”和“OR”。
我读过Combining 'AND' and 'OR' Condition in NSPredicate ,不同之处在于提问者想要一个子集合上的“或”,所以答案涉及一个我不想要的子查询。
我该怎么做?
【问题讨论】:
您遇到了什么错误?你试过"( name contains[cd] %@ )AND (position in %@)",name,[position1,position2])
吗?
谢谢,这比我做的更好!
原来我错误地认为上述方法不起作用。在我尝试使用传统的 Swift 插值通过 for 循环将字符串添加到 NSPredicate 之前 - 我怀疑这会导致 Core Data 错误。然后我在尝试使用 NSCompoundPredicate 之后忘记了这是问题所在。
【参考方案1】:
我没有足够的声望发表评论。您发布的内容应该有效。发布更多代码以识别确切问题可能会有所帮助。
希望它能帮助您发现问题,我将发布一个结合了AND
和OR
的工作示例:
let alice = Person(firstName: "Alice", lastName: "Smith", age: 24, position: "Up")
let bob = Person(firstName: "Bob", lastName: "Jones", age: 27, position: "Left")
let charlie = Person(firstName: "Charlie", lastName: "Smith", age: 33, position: "Right")
let quentin = Person(firstName: "Quentin", lastName: "Alberts", age: 31, position: "Down")
let people = [alice, bob, charlie, quentin]
let predicate = NSPredicate(format: "firstName contains[cd] %@ AND (position == %@ OR position == %@)", "e", "Up", "Down")
let filtered = (people as NSArray).filteredArrayUsingPredicate(predicate)
print(filtered)
// prints [Alice Smith, Quentin Alberts]
【讨论】:
以上是关于在 NSPredicates 上结合“And”和“Or”的主要内容,如果未能解决你的问题,请参考以下文章
在 NSFetchRequest 上设置 2 个 NSPredicates
使用 NSPredicates 过滤 NSMutableArray