我正在尝试从 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
,然后我做回调方法,如何在那个c方法中使用self?如果我不能使用我的对象,我该如何更新我的表格 View ?
最佳答案
不能直接使用self
在该函数中-但是当您注册更改回调时,您将 self 作为上下文传递,因此它将作为 addressBookChanged 函数中的参数传递。
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];
}
注册更改回调时,请确保 self.wkListVC 不为零。
关于ios - 在通讯录更新时收到通知,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24558169/