iphoneobjective-cxcodeabpersonviewcontroller

Take the selected phone number [iPhone]


I'm trying to take phone number from the Contacts on the iPhone. I implemented the

-(BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person property:(ABPropertyID)property identifier:(ABMultiValueIdentifier)identifier

from the ABPeoplePickerNavigationControllerDelegate

In this method there is this code and it works:

NSString *firstName = (NSString *)CFBridgingRelease(ABRecordCopyValue(person, kABPersonFirstNameProperty));
    NSLog(@"First Name ---> %@" ,firstName);

    NSString *secondName = (NSString *)CFBridgingRelease(ABRecordCopyValue(person, kABPersonLastNameProperty));
    NSLog(@"Last name ---> %@" ,secondName);

but now I need to take also the phone number selected from the user. I have tried with this but it doesn't work for me:

NSString *numberSelected = (NSString *)CFBridgingRelease(ABRecordCopyValue(person, property));

this give me a strange value like this:

ABMultiValueRef 0xa36e990 with 1 value(s)
    0: _$!<Mobile>!$_ (0xa36ee50) - (123) 456-7890 (0xa36ee70)

Then I tried with this but also this doesn't work:

ABMutableMultiValueRef multi = ABRecordCopyValue(person, property);
    CFStringRef phone = ABMultiValueCopyLabelAtIndex(multi, identifier);
    NSLog(@"Number Selected ---> %@" ,(NSString *)CFBridgingRelease(phone));
    CFRelease(phone);

    NSLog(@"Number Selected --> %@" ,numberSelected);

The string displayed is only:

_$!<Mobile>!$_

Now I don't know what to do... can you help me?

Thanks!


Solution

  • Try with is :

        CFStringRef cfnumber;
        ABMultiValueRef numbers = ABRecordCopyValue(person, kABPersonPhoneProperty); 
        for(CFIndex i = 0; i < ABMultiValueGetCount(numbers); i++) 
        {
            if(identifier == ABMultiValueGetIdentifierAtIndex (numbers, i)) 
            { 
                //if tapped number identifier is the same as identifier number tapped
                cfnumber = ABMultiValueCopyValueAtIndex(numbers, i); // copy the number to CFSTRING number
            }
        }        
        NSString *number = [NSString stringWithFormat:@"%@",cfnumber];
        CFRelease(cfnumber);