I know how to get the phone number from an ABRecordRef, but what I want now is to also get the type of the number, i.e. its label as a string:
const CFStringRef kABPersonPhoneIPhoneLabel;
const CFStringRef kABPersonPhoneMainLabel;
const CFStringRef kABPersonPhoneHomeFAXLabel;
const CFStringRef kABPersonPhoneWorkFAXLabel;
const CFStringRef kABPersonPhonePagerLabel;
Here is how I get the numbers:
//get all phone numbers                   
NSArray *phoneNumbersArray = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty);
NSInteger numbersCounter = 0;
for(numbersCounter = 0; numbersCounter < [phoneNumbersArray count]; numbersCounter++)
{
     NSString currentPhoneNumber = [phoneNumbersArray objectAtIndex:indexPhoneNumber];
      // here i would like to read the type of phone number 
      // NSLog(@"NumberType:%@",numberType);                    
 }
I tried all sorts of things and I've read the ABPerson Reference and I don't know how to get the phone number type?
I have figure out how to read the localized label of the phone number
//get all phone numbers
ABMultiValueRef phoneNumberMultiValue = ABRecordCopyValue(currentPerson, kABPersonPhoneProperty);
NSUInteger phoneNumberIndex;
for (phoneNumberIndex = 0; phoneNumberIndex < ABMultiValueGetCount(phoneNumberMultiValue); phoneNumberIndex++) {
    CFStringRef labelStingRef = ABMultiValueCopyLabelAtIndex (phoneNumberMultiValue, phoneNumberIndex);
    NSString *phoneLabelLocalized = (NSString*)ABAddressBookCopyLocalizedLabel(labelStingRef);
    NSString *phoneNumber  = (NSString *)ABMultiValueCopyValueAtIndex(phoneNumberMultiValue, phoneNumberIndex);
    //memory management
    [phoneLabelLocalized release];
    [phoneNumber release];
    CFRelease(labelStingRef);
}
Here's a code snippet that creates a person, adds 2 phone contacts and then shows how to get at the label and value for the phone property:
ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType);
ABMultiValueIdentifier multivalueIdentifier;
ABMultiValueAddValueAndLabel(multi, @"(555) 555-1234",
                             kABPersonPhoneMobileLabel, &multivalueIdentifier);
ABMultiValueAddValueAndLabel(multi, @"(555) 555-2345",
                             kABPersonPhoneMainLabel, &multivalueIdentifier);
ABRecordRef aRecord = ABPersonCreate();
CFErrorRef anError = NULL;
ABRecordSetValue(aRecord, kABPersonPhoneProperty, multi, &anError);
CFRelease(multi);
multi = ABRecordCopyValue(aRecord, kABPersonPhoneProperty);
for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++)
{
    CFStringRef phoneNumber, phoneNumberLabel;
    phoneNumberLabel = ABMultiValueCopyLabelAtIndex(multi, i);
    phoneNumber      = ABMultiValueCopyValueAtIndex(multi, i);
    NSLog(@"%@ %@", (NSString *) phoneNumberLabel, (NSString *) phoneNumber);
    CFRelease(phoneNumberLabel);
    CFRelease(phoneNumber);
}
CFRelease(aRecord);
CFRelease(multi);
In the code it iterates over all the multi-values and extracts the label and number as it goes, using ABMultiValueCopyLabelAtIndex and ABMultiValueCopyValueAtIndex respectively.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With