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

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

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

1 Ответ

2 голосов
/ 17 мая 2011

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

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

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

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

...