Как редактировать контакт? - PullRequest
1 голос
/ 04 января 2010

Есть ли способ редактировать контакт программно в iPhone? Например, я хочу изменить контакт, который возвращается ABPeoplePickerNavigationController. Как я могу это сделать? У меня есть:

(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person
{
  NSString *phoneNum = @"01234567890";

ABAddressBookRef addressBook = ABAddressBookCreate();
contact = ABAddressBookGetPersonWithRecordID(addressBook, ABRecordGetRecordID(person));

if(phoneNum && contact != NULL)
{
    ABMutableMultiValueRef phoneNumberMultiValue =  ABMultiValueCreateMutable(kABMultiStringPropertyType);
    ABMultiValueAddValueAndLabel(phoneNumberMultiValue, phoneNum,  kABPersonPhoneMobileLabel, NULL);

    [self dismissModalViewControllerAnimated:YES];

    ABRecordSetValue(contact, kABPersonPhoneProperty, phoneNumberMultiValue, nil);
            //THIS CODE IS NOT BEHAVING AS I EXPECTED,
    //if(ABAddressBookHasUnsavedChanges(addressBook))//Anyway this needs to be checked
    {
        ABAddressBookSave(addressBook, NULL);
    }
}
   return NO;

}

Звонок на ABAddressBookSave(addressBook, NULL); работает. Но проблема в том, что вся старая информация о «контакте» удаляется из адресной книги, и в конце сохраняется только «номер телефона».

Как я могу решить эту проблему?

Ответы [ 3 ]

1 голос
/ 05 января 2010

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

Кажется, что единственная потерянная информация - это другие номера телефона контакта, верно?Это означает, что другие детали ABRecordRef, такие как адрес, заметки, даты рождения и т. Д., Остаются неизменными.

Если это правильно, я предполагаю, что единственный реальный способ противодействовать этому удалению других телефонных номеров - просто добавитьPhoneLabel для существующего контакта kABPersonPhoneProperty.Вместо создания нового ABMutableMultiValueRef для телефонных номеров скопируйте его из записи следующим образом:

ABMutableMultiValueRef phoneNumberMultiValue = ABMultiValueCreateMutableCopy((ABMultiValueRef)ABRecordCopyValue(contact, kABPersonPhoneProperty));

Теперь вы можете добавить новый телефонный номер с тем же кодом:

ABMultiValueAddValueAndLabel(phoneNumberMultiValue, phoneNum,  kABPersonPhoneMobileLabel, NULL);

Что в этом хорошего, так это то, что не происходит никакой замены или удаления - приложение просто добавляет другой номер телефона к свойству телефонных номеров контакта.: D

Надеюсь, это поможет.

0 голосов
/ 06 января 2010

В настоящее время нет возможности редактировать и сохранять контакты в адресной книге. IPhone API не поддерживает это требование. Чтобы отредактировать конкретный контакт, нам нужно получить ссылку на этот контакт по идентификатору записи, скопировать всю информацию в ссылку и затем сохранить этот контакт в адресной книге.

0 голосов
/ 04 января 2010

Первое, что вы должны сделать, это передать ссылку на CFErrorRef в качестве второго аргумента ABAddressBookSave; может случиться так, что он пытается сообщить об ошибке, но не может, так как вы не даете ему этот аргумент.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...