我有一个类在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