2016-02-05 5 views
0

При использовании NSPredicate, я пытаюсь выполнить поиск всех объектов (строк), содержащихся в массиве. Пример кода ниже работает, но предикат только собирает объект только в первом индексе? NSPredicate используется для CKQueryOperation. Каждое значение Record имеет значение для ключа с именем Category.Использование NSPredicate с массивом для поиска cloudKit

let array: [String] = ["Education", "Sport", "TV and Film"] 

    // select all records 
    //let predicate = NSPredicate(format: "Category = %@", category) 



    let predicate = NSPredicate (format: "Category == %@", argumentArray: array) 

    let query = CKQuery(recordType: "quizRecord", predicate: predicate) 

    // get just one value only 
    let operation = CKQueryOperation(query: query) 

    //code works but only queries Records with the Category for "Education" 
+0

http://stackoverflow.com/questions/18059170/nspredicate-predicatewithformatargumentarray-only-evaluating-first-argument? – Larme

+0

@ Larme, что вопрос/ответ был в объективе C. Я пробовал много вариантов, но могу перевести его в Swift. – pete

+0

Как вы получаете более одного значения? –

ответ

2

Попробуйте заменить:

"Category == %@" 

С:

"Category IN %@" 
+0

Спасибо, но я получу следующую ошибку с ответом: «CKException», причина: «Неверный предикат: категория IN« Образование »(ошибка домена = CKErrorDomain Code = 12« Недопустимый оператор в : Неподдерживаемый оператор: IN "UserInfo = {ck_isComparisonError = true, – pete

+1

Я знаю, что здесь происходит. Измените предикатную строку: ' let predicate = NSPredicate (формат: «Категория ==% @», аргументArray: array) 'to' let predicate = NSPredicate (формат: «Категория ==% @», аргументArray: [array]). Обратите внимание, что массив должен быть помещен в массив параметров аргументаArray. Это должно быть сделано в сочетании с изменением 'IN' внутри предиката, описанного выше. –

+0

Да, вот и все! Великолепная работа. Спасибо Дэнни. Я очень ценю вашу помощь. – pete

0

У меня была такая же проблема, как Питер Уайли. Решение, которое я нашел, было размытым решением Danny Bravo и прокомментировать это решение.

let arrayPredicate = NSPredicate(format: "Name IN %@", argumentArray: [names]) 

Чтобы получить несколько результатов, мне нужно было использовать как ключевое слово «IN» в формате, так и wrapArray с помощью [].

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