адресная книга iPhone внешнее изменение перезвонить - PullRequest
0 голосов
/ 15 апреля 2011

Я занимаюсь разработкой приложения с использованием родной адресной книги.Я зарегистрировал обратный вызов для получения уведомления, когда внешняя книга изменилась.

ABAddressBookRegisterExternalChangeCallback(myAddrrbook, changefunction, self)

Мое приложение может делать новые записи внутри AddressBook, для этого я использую ABNewPersonViewController, например:

ABNewPersonViewController *controller = [[ABNewPersonViewController alloc] init];

controller.addressBook = myAddrrbook;

Проблема в том, что я все еще получаю уведомления, когда использую собственное приложение, как будто оно изменилось где-то еще.Но когда я запускаю на симуляторе, все OK и при добавлении контакта уведомление не отправляется.Как избежать получения уведомления на устройстве?

Кто-нибудь сталкивался с такой проблемой?

1 Ответ

2 голосов
/ 02 июня 2011

Обратный вызов будет вызываться всякий раз, когда ЛЮБОЕ приложение (включая ваше) изменяет адресную книгу устройства. Согласно документации Apple:

ABAddressBookRegisterExternalChangeCallback

Регистрирует обратный вызов для получения уведомлений, когда адресная книга база данных изменена.

(найдено на сайте разработчиков Apple )

В этом случае слово «Внешний» в обратном вызове, вероятно, лучше всего считать «внешним по отношению к собственному коду обработки адресной книги устройства», а не «внешним по отношению к моему приложению»

Насколько я знаю, единственный способ отфильтровать изменения, которые делает ваше приложение, состоит в том, чтобы установить флаг перед внесением любых изменений локально, а затем проверить флаг в обратном вызове (хотя это может привести к условиям гонки, он не должен не является серьезной проблемой для iPhone в большинстве случаев)

...