Как получить список обновленных контактов из ABAddressBookRegisterExternalChangeCallback?

Я использую ABAddressBookRegisterExternalChangeCallback для получения уведомлений об изменении контактов адресной книги ios.

Как получить список обновленных (добавленных/удаленных/измененных) контактов из обратного вызова? Я не хочу снова перезагружать весь список контактов.

Кажется, я не могу найти его нигде в документации. Может ли кто-нибудь направить меня, как это сделать?


person wjh    schedule 19.03.2013    source источник


Ответы (1)


Вы не можете. Что вы можете сделать, так это то, что вы получите список контактов, которые были «изменены за указанное время», например. :

void MyAddressBookExternalChangeCallback (ABAddressBookRef notifyAddressBook,CFDictionaryRef info,void *context)
{        
    //The addressbook object get's updated.


    CFArrayRef peopleRefs = ABAddressBookCopyArrayOfAllPeopleInSource(notifyAddressBook, kABSourceTypeLocal);



    ABAddressBookRevert(notifyAddressBook);

    CFIndex count = CFArrayGetCount(peopleRefs);

    for (CFIndex i=0; i < count; i++) {
        ABRecordRef ref = CFArrayGetValueAtIndex(peopleRefs, i);
        NSDate* datemod = (__bridge_transfer NSDate *)(ABRecordCopyValue(ref, kABPersonModificationDateProperty));


        NSTimeInterval distanceBetweenDates = [[NSDate date] timeIntervalSinceDate:datemod];

        int seconds = round(distanceBetweenDates);

        if(seconds < 60){

            ABCPerson * person = [[ABCFacade sharedABCFacade] convertABRecordRef:ref];
            NSLog(@"modifactiondate: %@", [person modificationdate]);

            [[ABCFacade sharedABCFacade] replacePersonInPersonListWithPerson:person];

        }
    }


    NSLog(@"Yes it does get called by this change %@", context);

    [[ABCFacade sharedABCFacade] ABRefresh];   
}
person Qwin    schedule 19.03.2013
comment
Думаю, тогда это единственный способ. Спасибо. - person wjh; 20.03.2013