Как создать контакт в локальной адресной книге?

Я хочу программно создать контакт в «локальной» адресной книге (чтобы он не пытался синхронизироваться, что вызывает некоторые проблемы совместимости с Exchange).

Если локальная адресная книга уже существует, я могу найти ее с помощью ABAddressBookCopyArrayOfAllSources, чтобы получить все источники в адресной книге, затем найдите ABRecordRef с sourceTypeRef «kABSourceTypeLocal» - если я затем передаю эту recordRef в ABPersonCreateInSource, я могу добавить запись в локальный каталог.

Есть ли у кого-нибудь предложения относительно того, как мне лучше всего создать запись в «локальной адресной книге», если локальной адресной книги еще нет?

(Кроме того, как я мог сделать это до iOS4, если вышеупомянутые вызовы тогда были недоступны?)

Спасибо

Питер


person Peter Johnson    schedule 13.01.2011    source источник
comment
привет, я просто хотел подтвердить .... вы хотите сохранить контакт в приложении контактов по умолчанию?   -  person Pavan    schedule 13.01.2011
comment
Не совсем так, поскольку адресная книга по умолчанию может не быть локальной адресной книгой, и мне нужна локальная (или какие-то другие средства предотвращения синхронизации, так как это убивает мою контактную запись путем переформатирования адреса электронной почты). Если я вручную создаю локальную адресную книгу (например, на моем iPhone на странице группы контактов) и сохраню там контакт, мое приложение будет работать отлично, но я хотел бы сделать это прозрачным для пользователя.   -  person Peter Johnson    schedule 13.01.2011
comment
... с другой стороны, если ваш вопрос заключался в том, хочу ли я, чтобы контакт был сохранен в адресной книге, чтобы к нему могли получить доступ другие приложения (а не частные)? Тогда ответ должен быть Да.   -  person Peter Johnson    schedule 13.01.2011


Ответы (2)


Вам следует взглянуть на этот пост: Получение определенного источника ABS из ABAddressBook в iOS 4+

который демонстрирует, как идентифицировать и настраивать таргетинг на определенные источники (ABSource) в ABAddressBook. Хотя в этом коде упоминается функция ABGroupCreateInSource (), существует аналогичная функция ABPersonCreateInSource () для работы с людьми.

person xyzzycoder    schedule 25.01.2011

Я нашел простой обходной путь. Поскольку вы не можете видеть / добавлять локальные контакты, если у вас нет ранее существовавших локальных контактов, можно безопасно использовать следующий обходной путь:

  1. Представим, что вы пользуетесь Gmail (Exchange)
  2. Зайдите в настройки своей почты для Gmail и отключите синхронизацию контактов.
  3. При появлении запроса о том, хотите ли вы сохранить или удалить контакты Gmail со своего телефона, выберите УДАЛИТЬ их (не волнуйтесь, они не будут удалены из Gmail).
  4. Вернитесь к своим контактам. Теперь вы можете создать один ЛОКАЛЬНЫЙ контакт
  5. Наконец, вернитесь в Настройки / Почта / Gmail и снова включите синхронизацию контактов.
  6. Вуаля, ваши контакты Gmail снова в вашем телефоне, и теперь у вас есть 1 локальный контакт, который позволяет вам получить доступ к группе локальных контактов в дополнение к группе контактов Gmail.

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

Бен.

person Ben    schedule 27.12.2011
comment
Привет, да, это работает, и я посоветовал этот метод своим пользователям, но было бы намного лучше сделать это из кода. Всегда есть определенное количество пользователей, это может сбить с толку (и вы будете время от времени получать плохие отзывы, потому что они не обращались за помощью с этим) - person Peter Johnson; 29.12.2011