2014-07-03 134 views
1

我試圖使用預定義的方法收到通知時,地址簿更新

ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, NULL); 
ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self); 

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

我打電話我application:didFinishLaunchingWithOptions,然後我做的回調方法,如何使用C方法中自ABAddressBookRegisterExternalChangeCallback(addressBook, addressBookChanged, self);addressBook獲取更新?我如何更新我的tableview,如果我不能使用我的對象?

回答

5

您不能直接在該函數中使用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在您註冊的更改回調不爲零。

+0

我把我的上下文發送到回調函數'((__bridge void *)myClass)'? 當我這樣做,我發現我的情況下等於零,所以我沒有得到的對象。難道我做錯了什麼? –

+0

' - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions :(NSDictionary *)launchOptions { ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL,NULL); ABAddressBookRegisterExternalChangeCallback(addressBook,addressBookChanged,(__bridge void *)self.wkListVC); 返回YES; (@ AddressBook Changed「);} { } –

+0

'void addressBookChanged(ABAddressBookRef addressBook,CFDictionaryRef info,void * context) { NSLog(@」AddressBook Changed「); wbkABViewControllerTableViewController * myVC =(__bridge wbkABViewControllerTableViewController *)context; [myVC getPersonOutOfAddressBook]; } ' –