Как пользовательские предикаты (которые требуют KVC) для объекта CF, как ABRecord?

Я разрабатываю приложение на основе ABAddressBook. Я хочу использовать предикаты для оценки или сравнения объектов в abaddressbook. Но похоже, что ABAddreesBook является базовой платформой и не поддерживает KVC. Означает ли это, что я не могу использовать предикаты в своем приложении?

Или есть какой-то другой способ сделать что-то вроде предикатов?

1 ответ

Решение

Короткий ответ: вы не можете.

Длинный ответ: вы можете, но это будет много работы. Я бы, наверное, сделал что-то вроде этого:

  1. Пройдите через все NSExpressions предиката агрегировать все -keyPath строки и хранить их в массиве. Это будут свойства ABRecord объекты, которые вы будете запрашивать.
  2. Итерация по вашему массиву ABRecord объекты и создать словарь для представления каждого. Этот словарь будет иметь идентификатор записи, а также ABRecordCopyValue() значение каждого из "желаемых" путей к ключам, связанное с именем свойства.
  3. Эти словари будут объединены в массив.
  4. Этот новый массив (словарей) будет отфильтрован с помощью предиката
  5. После фильтрации уменьшенный массив словарей будет преобразован обратно в массив ABRecord объекты и вернулся.

Это звучит как интересная проблема. Я подумаю об этом немного больше и, возможно, вернусь и отредактирую свой ответ.

Другие вопросы по тегам