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