在通讯录更新时收到通知 [英] getting notified when addressbook updates

查看:159
本文介绍了在通讯录更新时收到通知的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用预定义的方法从 addressBook 获取更新

I am trying to get updates from addressBook using the predefined method

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?如果我无法使用对象,该如何更新表视图?

I am calling ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self); in my application:didFinishLaunchingWithOptions, then i do the callback method, how can use self inside that c method? how can i update my tableview if i can't use my objects?

推荐答案

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

You can't directly use self in that function - but you're passing self as the context when you register for the change callback, so it will be passed as an argument in the addressBookChanged function.

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

更具体地讲授您的课程-

to be more specific to your classes -

- (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。

Make sure self.wkListVC is not nil when you register for the change callback.

这篇关于在通讯录更新时收到通知的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆