我有一个类似的问题。第一次回调只会被调用一次,但是如果我第二次出去更改地址簿,那么它会被多次调用。对我来说,问题是ABAddressBookRegisterExternalChangeCallback
在 appDelegate 的方法中调用的applicationWillResignActive:
方法。
我使用地址簿的方式是用于同步设置。问题是,每次保存同步设置时,我都在注册外部回调,而不仅仅是在更改同步设置时。
为了说明,这是我在 appDelegate 中调用的代码
- (void)saveSettings
{
NSUserDefaults *syncSettingsData = [NSUserDefaults standardUserDefaults];
[syncSettingsData setObject:[NSNumber numberWithBool:self.isSyncingiPadContacts] forKey:SYNC_IPAD_CONTACTS_TURNED_ON];
[self setAddressBookChanged];
[syncSettingsData synchronize];
}
- (void)setAddressBookChanged
{
if (self.isSyncingiPadContacts)
{
ABAddressBookRegisterExternalChangeCallback(self.addressBook, addressBookChanged, (__bridge void *)self);
}
else
{
ABAddressBookUnregisterExternalChangeCallback(self.addressBook, addressBookChanged, (__bridge void *) self);
}
}
我删除了setAddressBookChanged
方法中的调用saveSettings
,只是在创建地址簿(第一次设置)以及用户更改同步设置时调用它。
希望这对您有所帮助。