在通讯录更新时收到通知
我正在尝试使用预定义的方法从addressBook
获取更新
ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self); void addressBookChanged(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) { NSLog(@"AddressBook Changed"); [self getContactsFromAddressBook]; }
我打电话给ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self);
在我的application:didFinishLaunchingWithOptions
,然后我做的callback方法,如何可以使用自己内部的C方法? 我如何更新我的tableview,如果我不能使用我的对象?
您不能在该函数中直接使用self
,但是当您注册更改callback时,您将自我作为上下文传递,因此它将作为addressBookChanged函数中的parameter passing。
void addressBookChanged(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) { NSLog(@"AddressBook Changed"); YourClass *yourInstance = (__bridge YourClass *)(context) [yourInstance getContactsFromAddressBook]; }
更具体到你的class级 –
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self.wkListVC); return YES; } void addressBookChanged(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) { NSLog(@"AddressBook Changed"); wbkABViewControllerTableViewController *myVC = (__bridge wbkABViewControllerTableViewController *)context; [myVC getPersonOutOfAddressBook]; }
确保在注册更改callback时self.wkListVC不为零。