Я реализую поле поиска, в котором пользователь может ввести строку для фильтрации элементов, отображаемых в представлении. Каждый отображаемый объект имеет отношение keywords
to-many, и я хотел бы иметь возможность фильтровать объекты на основе их ключевых слов. Каждый объект ключевого слова имеет свойство name
, поэтому я настроил NSPredicate для фильтрации, которая выглядит так:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS %@", self.searchString];
Это работает, но проблема в том, что поиск чувствителен к регистру, поэтому, если ключевое слово имеет заглавную букву, но пользователь вводит все строчные буквы, совпадений не найдено. Я пробовал следующую модификацию:
NSPredicate* predicate = [NSPredicate predicateWithFormat:@"keywords.name CONTAINS[c] %@", self.searchString];
Но это не влияет на чувствительность к регистру. Есть ли способ сделать это нечувствительное к регистру сопоставление с использованием простого предиката? Или мне нужно будет реализовать какой-то пользовательский аксессуар в классе ключевого слова, например. написать метод lowercaseName
и сопоставить с нижней строкой строки поиска вместо?
Приложение: После дальнейшего изучения обходной путь добавления пользовательского аксессора работает нормально для ручного использования NSPredicate, но не работает при использовании NSFetchRequest с Core Data, что работает только при запросе атрибутов, определенных в модели Core Data.