Форум программистов, компьютерный форум, киберфорум
Наши страницы
Swift
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
kievkao
42 / 42 / 2
Регистрация: 22.11.2012
Сообщений: 225
#1

Предикат в NSFetchRequest

12.09.2014, 15:19. Просмотров 1687. Ответов 1
Метки нет (Все метки)

Всем привет!

По рекомендации форумчан делаю для себя тренировочный проект на Swift, пытаясь интегрировать туда максимум разноплановых вещей, и, вот, застрял на одном моменте связанном с CoreData:

Задача - сделать выборку сущностей из базы, в которых определенное строковое поле равно одному из перечисленных значений.

Сделал общий тест функционала с хардкорным кол-вом возможных вариантом, среди которых надо выбирать. Так работает:
Objective-C
1
fetchRequest.predicate = NSPredicate(format: "type MATCHES '.*(%@ | %@).*'", argumentArray: ["Opera", "Ballet"])
Но есть необходимость сделать кол-во аргументов для сравнения переменным. Чтобы мы могли передать в метод массив со строковыми значениями, и использовать его для сравнения.

Сделал так:
Objective-C
1
2
fetchRequest.predicate = NSPredicate(format: "type IN %@", argumentArray: typesArray)
let fetchedObjects = managedObjectContext!.executeFetchRequest(fetchRequest, error: &error)
Но тут валится эксепшн на второй строке с текстом
Objective-C
1
-[Swift._NSContiguousString countByEnumeratingWithState:objects:count:]: unrecognized selector sent to instance 0x78ff0a20
Пока не могу понять, как правильно организовать этот процесс..
Буду рад советам!

Добавлено через 33 минуты
Спустя некоторое время удалось сделать таким образом:
Objective-C
1
2
3
4
5
6
7
var predArray : Array<NSPredicate> = []
        
        for typeStr : String in typesArray {
            predArray.append(NSPredicate(format: "type LIKE %@", typeStr))
        }
       ...
        fetchRequest.predicate = NSCompoundPredicate(type: NSCompoundPredicateType.AndPredicateType, subpredicates: predArray)
Не знаю, правда, насколько это оптимальное решение.. Кажется, что не очень.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.09.2014, 15:19
Ответы с готовыми решениями:

Предикат see
Объясните предикат see и приведите пожалуйста примеры, где он используется.

Предикат plus(?X, ?Y, ?Z)
Здравствуйте, помогите решить задачу, в прологе новичок. Напишите вариант...

предикат
Здравствуйте, не могу понять что должна принимать функция в качестве предиката....

Предикат
Составить программу которая находит выражение предиката определяющего выражение...

Предикат
Ребят,нужна очень помощь. Условие. Для заданного предиката с помощью кванторов...

1
yurybelevskiy
0 / 0 / 0
Регистрация: 18.08.2016
Сообщений: 1
18.08.2016, 13:03 #2
Попробуйте указать Ваш предикат в формате:
Objective-C
1
NSPredicate(format: "type IN %@", typesArray)
(необходимо убрать argumentsArray)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.08.2016, 13:03

Предикат
Написать программу, которая определяет истинность предиката. L=(NOT(C)AND D)...

Разработать предикат
Помогите пожалуйста. Разработать предикат, который по исходному бинарному...

Предикат. Список
Предположим, что элементами списка являются не только атомы, но и списки....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru