как получить новый добавленный идентификатор контакта с помощью CNContactStoreDidChangeNotification?

Я хочу получить все новые добавленные идентификаторы контактов.

Вот мой код:

-(void)viewWillAppear:(BOOL)animated {

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(addressBookDidChange:) name:CNContactStoreDidChangeNotification object:nil];
}

-(void)addressBookDidChange:(NSNotification*)notification
{
    //Handle event here...
    NSDictionary *dict = notification.userInfo;
    NSLog(@"Notification - %@",dict);

}

Массив CNNotificationSaveIdentifiersKey всегда пуст.

 Notification - {
    CNNotificationOriginationExternally = 1;
    CNNotificationSaveIdentifiersKey =     (
    );
    CNNotificationSourcesKey =     (
    );
}

person Mayuri R Talaviya    schedule 08.03.2017    source источник
comment
Вы узнали, как получить идентификатор из приведенного выше кода?   -  person Nandhakumar Kittusamy    schedule 27.02.2018
comment
Меня пытаются, но не добиться успеха. Итак, наконец, мое решение заключается в том, что когда я получаю уведомление об изменении некоторого значения в контакте, я синхронизирую свои данные с сервером для нового контакта или любого выпуска. Но для этой логики ваше приложение находится либо на переднем плане, либо в фоновом режиме.   -  person Mayuri R Talaviya    schedule 28.02.2018
comment
как синхронизировать данные с сервером. Есть ли какой-либо фреймворк или отдельный класс в iOS для синхронизации данных с сервером?   -  person Nandhakumar Kittusamy    schedule 28.02.2018
comment
Нет фреймворка или класса.   -  person Mayuri R Talaviya    schedule 28.02.2018
comment
тогда как вы синхронизировали данные с сервером? не могли бы вы поместить свой код в качестве ответа.   -  person Nandhakumar Kittusamy    schedule 28.02.2018
comment
Извините, я не могу разместить здесь полный код, но что я сделаю для этого 1. Сначала возьмите всю контактную информацию и загрузите на сервер 2. Когда вы получите какие-либо изменения в контакте, сравните с данными сервера и определите новые Обновить. 3 Теперь на сервер отправляются только обновленные данные. Вы можете сравнить идентификатор контакта для сравнения.   -  person Mayuri R Talaviya    schedule 28.02.2018
comment
вы отправили массив json контактов на сервер или что-то еще. если размер контакта большой, то запрос будет отклонен в низкой сети.   -  person Nandhakumar Kittusamy    schedule 28.02.2018
comment
Я использую массив json. Я не сталкиваюсь с проблемой размера контакта.   -  person Mayuri R Talaviya    schedule 01.03.2018
comment
Давайте продолжим это обсуждение в чате.   -  person Nandhakumar Kittusamy    schedule 01.03.2018


Ответы (1)


Когда вы получите это уведомление, вам нужно снова получить контакты. Документ Apple так говорит.

https://developer.apple.com/documentation/contacts/cncontactstore

Если вы кешируете извлеченные контакты, группы или контейнеры, вам необходимо повторно получить эти объекты (и освободить старые кешированные объекты) при публикации CNContactStoreDidChange.

person infiniteLoop    schedule 10.01.2020