7
我的應用程序註冊回調一次:ABAddressBookRegisterExternalChangeCallback工作,但數據是陳舊
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()
,但它也沒有幫助。
任何想法?
另外,在上面的示例中可能沒有看到,您必須確保您的ABAddressBookRef僅由一個線程使用。 – lef
爲什麼不使用API ABAddressBookRevert()?在地址簿中裝入在地址簿數據庫中的信息。 – frank