2013-03-19 2 views
2

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

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

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

ответ

3

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

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]; 
} 
+0

Я предполагаю, что это единственный путь. Благодарю. – wjheng