2015-09-14 5 views
6

Использование Realm DB в быстром приложении. Я пытаюсь отфильтровать результаты с помощью предиката следующим образом:Непрерывный поиск предикатов объекта Realm

class func fetchUsersFromDB(usersId: [String]) -> [User]{ 
     var users = [User]() 
     let realm = Realm() 
     let predicate = NSPredicate(format: "objectId IN %@", argumentArray: usersId) 
     var allUsers = realm.objects(User).filter(predicate) 
     users = Array(allUsers) 
     return users 
    } 

Но это не скомпилируется. Я получаю эту ошибку:

Terminating app due to uncaught exception 'Invalid value', reason: 'IN clause requires an array of items' 

Любые идеи, что я делаю неправильно?

+1

Он должен компилироваться. Вы получаете исключение во время выполнения – Shripada

+1

Номер строки 377, в https://github.com/realm/realm-cocoa/blob/master/Realm/RLMQueryUtil.mm указывает, что поддержка Swift Array отсутствует, они не подтвердите NSFastEnumeration .. – Shripada

+0

Есть ли другой способ? Должен ли я цитировать мой запрос для каждой строки в массиве? – denislexic

ответ

5

Удалите argumentArray: этикетку, так как с ним вы звоните неправильный инициализатор для NSPredicate:

let predicate = NSPredicate(format: "objectId IN %@", usersId)

+0

В последней версии XCode это не работает. У меня есть эта ошибка «Отсутствует метка аргумента» аргументArray: «в вызове». Вы видите то же самое? – StackOverflower

0

Как Свифта 3, просто использовать Array(usersId) вместо usersId.