У меня есть класс, содержащий список контактов моего пользователя в приложении для iPhone.
Суть его реализована следующим образом.
//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
, чтобы получать уведомления об изменениях в списке контактов.У меня проблема в том, что внешний обратный вызов не вызывается (я никогда не вижу результат сообщения nslog), когда я добавляю контакт в приложение для телефона iPhone.
Что я сделал не так?
Добавлено примечание: даже странно, если я делаю
ABAddressBookRevert(addressBook);
каждый раз, когда мое приложение выходит на передний план и изменяется адресная книга, тогда вызывается обратный вызов.