繁体   English   中英

在通讯录更新时收到通知

[英]getting notified when addressbook updates

我正在尝试使用预定义的方法从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? 如果无法使用对象,如何更新表格视图?

您不能在该函数中直接使用self但是在注册change回调时会将self作为上下文传递,因此它将作为参数传递给addressBookChanged函数。

void addressBookChanged(ABAddressBookRef addressBook, CFDictionaryRef info, void *context)
{
    NSLog(@"AddressBook Changed");
    YourClass *yourInstance = (__bridge YourClass *)(context)
    [yourInstance getContactsFromAddressBook];
}

更具体地讲授您的课程-

- (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不为nil。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM