Добавить номер телефона к существующему контакту - PullRequest
2 голосов
/ 12 января 2012

Я пытаюсь добавить номер телефона к существующему контакту, используя платформу AddressBook, после выбора человека с устройством выбора этот метод называется:

- (BOOL) peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person  
{
    if(_phoneNumber != nil)
    {
        ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy (ABRecordCopyValue(person, kABPersonPhoneProperty)); 
        ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)_phoneNumber, kABPersonPhoneOtherFAXLabel, NULL); 
        ABRecordSetValue(person, kABPersonPhoneProperty, multiPhone,nil); 
        CFRelease(multiPhone);
    }

    return FALSE;
}

Но после этого номер не добавляется в запись человека. Что я делаю не так?

1 Ответ

4 голосов
/ 17 января 2012

Вам необходимо сохранить эту запись в адресной книге.

Получить адресную книгу, используя свойство addressBook ABPeoplePickerNavigationController, затем вызвать ABAddressBookSave.

.что-то вроде:

- (BOOL) peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person  
{
    if(_phoneNumber != nil)
    {
        ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy (ABRecordCopyValue(person, kABPersonPhoneProperty)); 
        ABMultiValueAddValueAndLabel(multiPhone, (__bridge CFTypeRef)_phoneNumber, kABPersonPhoneOtherFAXLabel, NULL); 
        ABRecordSetValue(person, kABPersonPhoneProperty, multiPhone,nil); 

        ABAddressBookRef ab = peoplePicker.addressBook;
        CFErrorRef* error = NULL;
        ABAddressBookSave(ab, error);
        CFRelease(multiPhone);
    }

    return FALSE;
}

Вы можете проверить ABAddressBookSave возвращаемое значение для успеха / неудачи и получить дополнительную информацию в переменной error.

...