我有一個類在iPhone應用程序中持有我的用戶的聯繫人列表。在iOS中未調用ABAddressBook外部回調
它的核心實現如下。
//file Contacts.m
//imports here
void MyAddressBookExternalChangeCallback (
ABAddressBookRef addressBook,
CFDictionaryRef info,
void *context
)
{
NSLog(@"callback called ");
[[Contacts sharedInstance] refresh];
}
@implementation Contacts
@synthesize addressBook;
+ (Contacts*)sharedInstance
{
@synchronized(self)
{
if (sharedInstance == nil)
{
sharedInstance = [[Contacts alloc] init];
}
}
return sharedInstance;
}
- (void)refresh
{
ABAddressBookRevert(addressBook); /*refreshing the address book in case of changes*/
[people release];
people = (NSArray*)ABAddressBookCopyArrayOfAllPeople(addressBook);
}
- (id)init
{
if ((self = [super init]))
{
sharedInstance = self;
addressBook = ABAddressBookCreate();;
people = nil;
[self refresh];
ABAddressBookRegisterExternalChangeCallback ( addressBook,
MyAddressBookExternalChangeCallback,
self
);
}
return sharedInstance;
}
在init
,我安裝一個外部回調MyAddressBookExternalChangeCallback
通知更改聯繫人列表。 我遇到的問題是當我在iPhone手機應用程序中添加聯繫人時,外部回調未被調用(我永遠不會看到nslog消息的結果)。
我做錯了什麼?
補充說明:即使陌生人,如果我做
ABAddressBookRevert(addressBook);
每次我的應用程序走到前面和地址簿時已被修改,然後調用回調。
相似的問題:http://stackoverflow.com/questions/2706641/address-book-callback-not-called – pojo 2012-02-02 13:11:59
是的,看到,但我不會釋放我的地址簿在這個問題,所以我不不認爲這是問題。 – madewulf 2012-02-02 13:18:36