2009-11-19 2 views
4

Во многих моих приложениях требуется связать некоторые данные с контактом в адресной книге. То, что я использовал, - это сохранить идентификатор записи ABPerson и использовать этот идентификатор, чтобы извлекать информацию при каждом запуске приложения. Тем не менее, все больше и больше я нахожу, что этот подход неверен, потому что много раз пользователь будет использовать такую ​​услугу, как mobileme, где адресная книга вытирается и пересматривается. Это приводит к изменению идентификатора записи, и все ассоциации теряются. Пользователь должен будет пройти через каждый и повторно связать их.Каков правильный способ общения с ABPerson?

Что такое лучший подход к обеспечению надежного указателя на записи в адресной книге?

ответ

5

Вы должны сохранить три значения: идентификатор записи, имя и фамилию.

1) В случае, если идентификатор записи не изменился, вы золотой - просто используйте это, чтобы найти нужную запись.

2) Если ABAddressBookGetPersonWithRecordID() не находит запись для вашего сохраненного идентификатора записи (она возвращает NULL), вам нужно будет искать записи человека для соответствия на основе имени и фамилии. Вы можете отказаться от использования ABAddressBookCopyPeopleWithName() потенциально или написать свой собственный код определения местоположения, если у вас уже есть массив со всеми записями людей в памяти. Поиск новой записи зависит от вас. Чтобы найти новую запись, вы можете обновить хранилище данных с новым идентификатором записи.

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

0

Если адресная книга действительно полностью протерта и перезагружена, а единственная часть, которая не изменяется, - это отображаемое имя, а затем сохранение отображаемого имени, поскольку ссылка кажется единственной опцией.

2

Я знаю, что это было в прошлом году, однако я думал, что могу предложить метод, который я использую. В первый раз, когда я прошу пользователя выбрать контакт (чтобы связать некоторые личные данные моего приложения с ним), я затем захватываю запись, создаю свой собственный внутренний идентификатор записи (инициалы имени приложения и порядковый номер обычно) измените контакт, добавив новое имя ABRelatedName (тип «pref» name «Other») моего собственного внутреннего идентификатора записи. Похоже, что это в .vcf

item3.X-ABRELATEDNAMES;type=pref:BZA101 
item3.X-ABLabel:_$!<Other>!$_ 

Таким образом, я могу просто ссылаться на этот идентификатор записи, когда я добавить данные о пользователе, например, как в последний раз, когда пользователь приложение связался с ними, и т.д. Кажется работать меня.

Надежды, которые помогают кому-то.

+0

Работает ли это для iOS или Mac OS X? –

Смежные вопросы