Как программно изменить контактный номер в адресной книге? - PullRequest
1 голос
/ 28 сентября 2011

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

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

также, как я могу получить список всех телефонных номеров одного контакта,в случае, если у него есть несколько номеров.

1 Ответ

0 голосов
/ 28 сентября 2011

Чтобы позволить пользователю редактировать свои данные напрямую, см. Документация Apple по отображению и редактированию записи человека . В начальном разделе этого сказано: «Установите делегата, который должен принять протокол ABPersonViewControllerDelegate. Чтобы позволить пользователю редактировать запись, установите для allowEditing значение YES».

Например:

ABPersonViewController *personViewController = [[ABPersonViewController alloc] init];
personViewController.personViewDelegate = self;
personViewController.allowsEditing = YES;

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

Однако я вижу, что ваше название относится к этому программно. В руководстве Apple по программированию для адресной книги для iOS говорится: «Помните, что база данных адресной книги в конечном итоге принадлежит пользователю, поэтому приложения должны быть осторожны, чтобы не вносить в нее неожиданные изменения. Как правило, изменения следует инициировать или подтверждать». пользователем. "

Однако это возможно. Следующий пример приведен на стр.17 этого документа:

ABRecordRef aRecord = ABPersonCreate();
CFErrorRef anError = NULL;
bool didSet;

didSet = ABRecordSetValue(aRecord, kABPersonFirstNameProperty, CFSTR("Katie"), &anError);
if (!didSet) {/* Handle error here. */}

didSet = ABRecordSetValue(aRecord, kABPersonLastNameProperty, CFSTR("Bell"), &anError);     
if (!didSet) {/* Handle error here. */}

CFStringRef firstName, lastName; 
firstName = ABRecordCopyValue(aRecord, kABPersonFirstNameProperty);
lastName = ABRecordCopyValue(aRecord, kABPersonLastNameProperty);
/* ... Do something with firstName and lastName. ... */

CFRelease(aRecord);
CFRelease(firstName);
CFRelease(lastName);
...