Как использовать NSPredicate с NSPredicateEditor для разных данных (несколько предикатов?)
У меня есть массив путей к файлам, и в моем пользовательском интерфейсе есть настройка NSPredicateEditor, где пользователь может объединить NSPredicate для поиска файла. Он должен уметь фильтровать по имени, типу, размеру и дате.
У меня есть несколько проблем:
- Я могу получить только один объект предиката от редактора. Когда я использую "ForexateForRow:", он возвращает (NULL)
- Если пользователь хочет отфильтровать файл по имени И размеру или дате, я больше не могу просто использовать этот предикат в моем массиве, потому что эта информация не содержится в нем
Могу ли я разделить предикат на разные предикаты, не преобразовывая его в объект NSString, а затем выполнить поиск каждого @"ИЛИ" | @"И" и разделение компонентов в массив, а затем преобразование каждой строки NSString в новый предикат?
В настройках NSPredicateEditor у меня есть несколько вариантов для "левого выражения": ключевые пути, постоянные значения, строки, целые числа, числа с плавающей запятой и даты. Я хочу отобразить выпадающее меню для пользователя с "имя", "тип", "дата", "размер". Но тогда сгенерированный предикат автоматически выглядит так:
"name" MATCHES[c] "nameTest" OR "type" MATCHES[c] "jpg" OR size == 100
Поскольку массив заполнен строками, поиском "name", "type" и т. Д., И эти строки не отвечают на @"myString"*. Name * m, фильтр всегда возвращает 0 объектов. Есть ли способ показать имя, тип, размер и дату в меню, но написать "я" в предикат, не делая это вручную?
Я уже искал в официальных руководствах Apple, в Stackru, Google и даже на Youtube, чтобы найти подсказку. Эта проблема беспокоит меня уже почти неделю. Спасибо за ваше время! Если вам нужна дополнительная информация, пожалуйста, дайте мне знать!
1 ответ
Вы пришли в нужное место!:)
Я могу получить только один объект предиката от редактора.
Правильный. Это NSPredicateEditor
не NSPredicatesEditor
,;)
Когда я использую "Предикат для Row:" он возвращает
(null)
Я не уверен, что использовал бы этот метод. Мое общее правило - в значительной степени игнорировать это NSPredicateEditor
это подкласс NSRuleEditor
главным образом потому, что это настолько узкоспециализированный подкласс, что многие из методов суперкласса не имеют особого смысла в редакторе предикатов (как и все, что связано с критериями, выбором строк и т. д.). Возможно, они как-то актуальны, но если да, то я еще не понял, как это сделать.
Чтобы получить предикат от редактора, вы делаете:
NSPredicate *predicate = [myPredicateEditor objectValue];
Если пользователь хочет отфильтровать файл по имени И размеру или дате
Ты имеешь в виду (name = [something]) AND (size = [something] OR date = [something])
?
Если так, NSPredicateEditor
может сделать это, если вы установили режим вложенности "Соединение".
Я не могу больше использовать этот предикат в моем массиве, потому что эта информация не содержится в нем
Какая информация вам нужна?
Могу ли я разделить предикат на разные предикаты, не преобразовывая его в объект NSString, а затем выполнить поиск каждого @"ИЛИ" | @"И" и разделение компонентов в массив, а затем преобразование каждой строки NSString в новый предикат?
Да, но это плохая идея. Это плохо, потому что NSPredicate
уже содержит всю необходимую вам информацию, и преобразование ее в другой формат и выполнение строковых манипуляций просто не требуется и может привести к сложностям (например, если кто-то может ввести значение для "имени", что произойдет, если они введут " ИЛИ ЖЕ "?).
Я с трудом пытаюсь понять, что ты пытаешься сделать. Похоже, у вас есть массив NSString
объекты, которые вы хотите фильтровать на основе предиката, который создает пользователь? Если так, то что они делают name
, date
, а также size
ключевые пути означают? Что ты пытаешься сделать?