【问题标题】:Combining "And" and "Or" on NSPredicates在 NSPredicates 上结合“And”和“Or”
【发布时间】: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 之后忘记了这是问题所在。

标签: ios core-data nspredicate nscompoundpredicate


【解决方案1】:

我没有足够的声望发表评论。您发布的内容应该有效。发布更多代码以识别确切问题可能会有所帮助。

希望它能帮助您发现问题,我将发布一个结合了ANDOR 的工作示例:

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]

【讨论】:

    猜你喜欢
    • 2012-11-03
    • 2016-04-13
    • 2023-03-22
    • 2012-05-06
    • 2018-06-03
    • 2020-12-17
    • 1970-01-01
    • 2018-08-10
    • 1970-01-01
    相关资源
    最近更新 更多