Мое приложение регистрирует обратный вызов один раз:
notificationAddressBook = ABAddressBookCreate();
ABAddressBookRegisterExternalChangeCallback(notificationAddressBook, MyAddressBookExternalChangeCallback, self);
Затем в моем обратном вызове:
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);
}
При добавлении нового контакта событие запускается нормально, и данные актуальны в первом добавлении и второй и третий. Проблема заключается в редактировании сведений о существующем контакте.
При первом запуске события данные верны до последнего обновления (я изменил номер телефона одного контакта в контактах iPhone), затем я переключаюсь в приложение и получить последнее обновление. Затем переключаюсь обратно в адресную книгу,внести еще одно изменение, переключиться на мое приложение и получить другое событие. На этот раз данные устарели, последние изменения не отражены.
Я попытался освободить экземпляр ABAddressBookRef
и снова вызвать ABAddressBookCreate ()
, но это тоже не помогло.
] Есть идеи?