Как пользовательские предикаты (которые требуют KVC) для объекта CF, как ABRecord?
Я разрабатываю приложение на основе ABAddressBook. Я хочу использовать предикаты для оценки или сравнения объектов в abaddressbook. Но похоже, что ABAddreesBook является базовой платформой и не поддерживает KVC. Означает ли это, что я не могу использовать предикаты в своем приложении?
Или есть какой-то другой способ сделать что-то вроде предикатов?
1 ответ
Решение
Короткий ответ: вы не можете.
Длинный ответ: вы можете, но это будет много работы. Я бы, наверное, сделал что-то вроде этого:
- Пройдите через все
NSExpressions
предиката агрегировать все-keyPath
строки и хранить их в массиве. Это будут свойстваABRecord
объекты, которые вы будете запрашивать. - Итерация по вашему массиву
ABRecord
объекты и создать словарь для представления каждого. Этот словарь будет иметь идентификатор записи, а такжеABRecordCopyValue()
значение каждого из "желаемых" путей к ключам, связанное с именем свойства. - Эти словари будут объединены в массив.
- Этот новый массив (словарей) будет отфильтрован с помощью предиката
- После фильтрации уменьшенный массив словарей будет преобразован обратно в массив
ABRecord
объекты и вернулся.
Это звучит как интересная проблема. Я подумаю об этом немного больше и, возможно, вернусь и отредактирую свой ответ.