Я переношу приложение из устаревшей структуры адресной книги в новую структуру контактов. Приложение использует ABAddressBookRegisterExternalChangeCallback
, чтобы получать уведомление, когда другое приложение меняет контакт.
Я не могу найти эквивалентную функциональность в структуре контактов. В документации Apple говорится, что центр уведомлений по умолчанию с уведомлением CNContactStoreDidChangeNotification
:
Уведомление отправляется, когда изменения происходят в другом
CNContactStore
.
Принимая советы Apple, мой код выглядит следующим образом:
NSNotificationCenter.defaultCenter().addObserver(
self,
selector: "contactsChanged:",
name: CNContactStoreDidChangeNotification,
object: nil)
Однако я нашел две проблемы с этим подходом:
- Я получаю уведомление обо всех изменениях, в том числе в моем собственном приложении.
- Уведомления являются ложными - я получаю много уведомлений за одно изменение.
Если я зарегистрирую отладочное описание уведомления, когда изменение было внесено в мое приложение, я получаю что-то вроде этого:
NSConcreteNotification 0x7d3370e0 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
И если изменения сделаны извне:
NSConcreteNotification 0x7bf7a690 {name = CNContactStoreDidChangeNotification; userInfo = {
CNNotificationOriginationExternally = 1;
CNNotificationSourcesKey = (
);
}}
Как вы можете видеть, ничего очевидного, чтобы отличить их.
Может ли кто-нибудь сказать мне, как получить такое же поведение из структуры контактов, как можно получить от ABAddressBookRegisterExternalChangeCallback
?