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

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

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

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

Благодарю.

1 ответ

Решение

Чтобы позволить пользователю редактировать свои данные напрямую, см . Документацию 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);
Другие вопросы по тегам