Как проверить, добавлен ли новый адрес в адресную книгу? - PullRequest
2 голосов
/ 12 октября 2010

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

Как выполнить эту проверку? Я не могу найти подходящую логику для ее реализации.

Ответы [ 2 ]

3 голосов
/ 12 октября 2010

Нет простого способа получить «новые контакты» в адресной книге. Вместо этого вам придется сделать что-то вроде этого:

  1. Получить массив всех контактов в адресной книге .
  2. Прокрутите массив и посмотрите, есть ли контакт в вашей базе данных. ( ПРИМЕЧАНИЕ: Идентификаторы записи могут измениться !)
  3. Если вы найдете контакт, которого нет в вашей базе данных, добавьте его.

Вероятно, также целесообразно сохранить дату последнего изменения свойства и сравнить его с каждой записью, чтобы вы могли узнать, что-то изменилось в существующей записи.

Наконец, это может занять некоторое время в зависимости от количества контактов, которые есть у пользователя. Это, вероятно, то, что вы хотите сделать, не блокируя пользовательский интерфейс. (Еще одно примечание: типы адресной книги не являются потокобезопасными. Имейте это в виду, если вы работаете в фоновом потоке.)

Пока ваше приложение работает, вы можете зарегистрировать обратный вызов уведомления об изменении адресной книги , чтобы получать уведомления об изменениях, которые происходят во время работы вашего приложения.

0 голосов
/ 02 февраля 2012

Немного более простой способ (не нужно слишком много места в памяти):

  1. Сохраняйте последнюю метку времени в базе данных вашего приложения при загрузке данных из AddressBook и общего количества человек.

  2. написать функцию проверки и вызывать ее всякий раз, когда вам это нужно

  3. функция проверки: получить последнюю дату изменения во всех контактах и ​​получить общее количество прямо сейчас, просто сравните последнюю дату с меткой времени:

    BOOL beNeedRefresh = NO;

    if (последняя> метка времени) {

    beNeedRefresh = YES;

    } иначе if (количество в адресной книге! = Количество в вашей базе данных) {

    beNeedRefresh = YES;

    }

    если (beNeedRefresh) {

    обновить базу данных !!!!

    }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...