Как программно изменить контактный номер в адресной книге?
В настоящее время я пишу приложение, которое должно позволить пользователю изменять контактные данные (в основном номера) в приложении, а затем эти изменения должны быть отражены непосредственно в адресной книге.
Я тщательно искал в интернете, но все примеры, которые я нашел, были либо для загрузки контактов, либо для добавления нового контакта, но не для изменения существующего контакта.
также, как я могу получить список всех телефонных номеров одного контакта, если у него есть несколько сохраненных номеров.
Благодарю.
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);