添加属性
@property (nonatomic) ABAddressBookRef addressBook;
@synthesize addressBook = _addressBook;添加ABExternalChangeCallback方法
void addressCallback(ABAddressBookRef addressBook, CFDictionaryRef info, void *context) {
[_instance unregisterCallback];//or will more than once
NSLog(@”addressCallback”);
[_instance readAndWriteAddressBooksInBackground];
}
注意:程序之外,通讯录被改变是会调用此函数,但只知道通讯录被改变,具体怎么的改变不知道,info始终为null,
而且通讯录里面改变了几条,就会调用几次该监听函数,因此,要在第一次收到改变的时候,就移除监听。
- 注册监听
(void)registerCallback {
if (!_addressBook) {
_addressBook = ABAddressBookCreate();}
if (!_hasRegister) {
ABAddressBookRegisterExternalChangeCallback(_addressBook, addressCallback, self); _hasRegister = YES ; NSLog(@"registerCallback");}
}
注意:要保证_addressBook没有被release,才会调用addressCallback。
而且要保证只调用了一次注册,要是注册多次的话,通讯录中一条信息的改变,也会多次调用监听函数。
- 移除监听
- (void)unregisterCallback {
NSLog(@”unRegisterCallback”);
if (_hasRegister) {
}ABAddressBookUnregisterExternalChangeCallback(_addressBook, addressCallback, self); _hasRegister = NO;
}
