2016-05-15 4 views
0

я хочу сделать что-то вроде этого:Объединение «И» и «ИЛИ» на NSPredicates

NSPredicate(format: "name contains[cd] %@ AND (position == %@ OR position == %@), name, position1, position2) 

Однако, я попытался это и я получаю серьезные ошибки приложения Core Data. Затем я попытался использовать NSCompoundPredicate, но я не могу комбинировать «AND» и «OR».

Я читал Combining 'AND' and 'OR' Condition in NSPredicate, и все по-другому в том, что на вопросника требуется «ИЛИ» на подмножестве, поэтому ответ включает подзапрос, который я не хочу.

Как это сделать?

+1

Какие ошибки вы получаете? Попробуй свой '' (имя содержит [cd]% @) AND (позиция в% @) ", имя, [position1, position2])'? – Paulw11

+0

спасибо, это был лучший способ, чем я это делал! – anders32

+0

Оказывается, я ошибочно думал, что это не работает. Прежде чем я попытался добавить строки с использованием традиционной интерполяции Swift через цикл for к NSPredicate, который, как я подозревал, вызвал ошибки Core Data. Тогда я забыл, что это была проблема после попытки использования NSCompoundPredicate. – anders32

ответ

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] 

 Смежные вопросы

  • Нет связанных вопросов^_^