ABAddressBookRegisterExternalChangeCallback funciona, mas os dados são antigos
Meu aplicativo registra o retorno de chamada uma vez:
notificationAddressBook = ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(notificationAddressBook, MyAddressBookExternalChangeCallback, self);
Em seguida, no meu retorno de chamada:
void MyAddressBookExternalChangeCallback (ABAddressBookRef notifyAddressBook,CFDictionaryRef info,void *context)
{
NSLog(@"in MyAddressBook External Change Callback");
ABAddressBookRevert(notifyAddressBook);
CFArrayRef peopleRefs = ABAddressBookCopyArrayOfAllPeopleInSource(notifyAddressBook, kABSourceTypeLocal);
CFIndex count = CFArrayGetCount(peopleRefs);
NSMutableArray* people = [NSMutableArray arrayWithCapacity:count];
for (CFIndex i=0; i < count; i++) {
ABRecordRef ref = CFArrayGetValueAtIndex(peopleRefs, i);
ABRecordID id_ = ABRecordGetRecordID(ref);
TiContactsPerson* person = [[[TiContactsPerson alloc] _initWithPageContext:[context executionContext] recordId:id_ module:context] autorelease];
NSLog(@"name: %@", [person valueForKey:@"firstName"]);
NSLog(@"phone: %@", [person valueForKey:@"phone"]);
NSLog(@"modified: %@", [person valueForKey:@"modified"]);
[people addObject:person];
}
CFRelease(peopleRefs);
}
Ao adicionar um novo contato, o evento é acionado corretamente e os dados são atualizados na primeira adição e na segunda e terceira. O problema está na edição dos detalhes de um contato existente.
Na primeira vez em que o evento é acionado, os dados estão corretos até a última atualização (alterei o número de telefone de um contato nos contatos do iPhone), depois mudo para o aplicativo e recebo a atualização mais recente. Depois, volto ao catálogo de endereços, faço outra alteração, mudo para o meu aplicativo e recebo outro evento. Desta vez, os dados estão obsoletos, as alterações mais recentes não são refletida
Tentei liberar oABAddressBookRef
instância e chameABAddressBookCreate()
novamente, mas também não ajudo
Alguma ideia