добавление нового номера к существующей учетной записи в ABAddressBook — iPhone

#iphone #objective-c #ios #contacts

#iPhone

Вопрос:

Я пытаюсь обновить содержимое существующего контакта в адресной книге через свое приложение, но без необходимости в пользовательском интерфейсе. Сценарий выглядит следующим образом:

1 Пользователь вводит номер и имя 2 Приложение проверяет, есть ли это имя в списке контактов 3 если есть, то проверяет, является ли номер одним из контактов для этого имени 4 Если нет, то добавляет его к этому имени

Мне удалось выполнить шаги 1-3, но я не смог найти способ выполнить 4. Кто-нибудь может помочь?

Ниже, если как выглядит мой код

 ...
CFIndex lTotalContactsCount = ABAddressBookGetPersonCount(lAddressBook);
NSArray *people = (NSArray *)ABAddressBookCopyArrayOfAllPeople(lAddressBook );

for (CFIndex i = 0; i < lTotalContactsCount; i  )
{
    ABRecordRef lRef = (ABRecordRef)[people objectAtIndex:i];   

    ...
    // if names match
    {
        ABMutableMultiValueRef lPhoneNumbers = ABRecordCopyValue(lRef, kABPersonPhoneProperty);
        CFIndex lContactPhoneNumberCount = ABMultiValueGetCount(lPhoneNumbers);
        ABRecordID contactID = ABRecordGetRecordID(lRef);

        ...
         // if numbers dont match
        {
                   // THIS BIT IS NOT WOKRING
            CFErrorRef error = NULL; 

            ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutable(kABMultiStringPropertyType);
            ABMultiValueAddValueAndLabel(multiPhone, number, (CFStringRef)@"Duplicate", NULL);

        //  ABRecordSetValue(newPerson, kABPersonFirstNameProperty, name, amp;error);

            //add the number to the contact
            ABRecordSetValue(lRef, kABPersonPhoneProperty, multiPhone,nil);
        //  ABAddressBookAddRecord(lAddressBook, lRef, amp;error);
            ABAddressBookSave(lAddressBook, amp;error);
        }

        if( firstName )
            CFRelease(firstName);
        if( lastName )
            CFRelease(lastName);
        if( lPhoneNumbers )
            CFRelease(lPhoneNumbers);

        // no need to search other entries
        if(numberExists)
            break;
    }
  

Ответ №1:

После дальнейшего изучения этим утром API-интерфейсов мне удалось найти решение. Вот так:

 // contactId is the ID of the person i need to add a new number to his contacts
// got the id through : ABRecordGetRecordID( ABRecordRef )
ABRecordRef person = ABAddressBookGetPersonWithRecordID(lAddressBook, contactID);
ABMutableMultiValueRef multiPhone = ABMultiValueCreateMutableCopy(lPhoneNumbers);
ABMultiValueAddValueAndLabel(multiPhone, number, (CFStringRef)@"Duplicate", NULL);      
//add the number to the contact
ABRecordSetValue(person, kABPersonPhoneProperty, multiPhone,nil);
ABAddressBookSave(lAddressBook, amp;error);