Supertecnoboff Supertecnoboff - 3 months ago 94
Objective-C Question

Extract email from CNContactProperty - iOS 9

I have an iOS app which needs access to the Contacts picker view controller in order to allow the user to select a contact property such as email address/ telephone numbers of imessage email addresses.

The problem I am having right now, is that I can't figure out how to parse the returned data. I have made use of the

contactPicker didSelectContactProperty
method, but I am unable to parse the data I need.

-(void)contactPicker:(CNContactPickerViewController *)picker didSelectContactProperty:(CNContactProperty *)contactProperty {

CNLabeledValue *test = contactProperty.contact.emailAddresses.firstObject;
NSLog(@"%@", test);

NSLog(@"%@", contactProperty.contact.phoneNumbers);
}


If you run the above code you get the following response:

2015-10-11 13:30:07.059 Actions[516:212765] <CNLabeledValue: 0x13656d090: identifier=21F2B1B2-8158-466B-9224-E2036CA07D28, label=_$!<Other>!$_, value=News_Europe@iEUNS.com> 2015-10-11 13:30:07.061 App_Name[516:212765] (
"<CNLabeledValue: 0x13672a500: identifier=6697A0E9-3B91-4566-B26E-83B87979F816, label=_$!<Main>!$_, value=<CNPhoneNumber: 0x13672a660: countryCode=gb, digits=08000391010>>" )


Thats great, but how do I extract the data I need from it? Why are the NSLog statements returning the data in a weird format?

Thanks for your time, Dan.

Answer

The returned values are of the CNLabeledValue class. In order to get the value from them, for, say, the emails, do this

CNLabeledValue *emailValue = contactProperty.contact.emailAddresses.firstObject;
NSString *emailString = email.value;

If the value you wanted a phone number, this is how you would retrieve that

CNLabeledValue *phoneNumberValue = contactProperty.contact.phoneNumbers.firstObject;
CNPhoneNumber *phoneNumber = phoneNumberValue.value;
NSString *phoneNumberString = phoneNumber.stringValue;

Because the returned value is a CNLabeledValue, you are also able to retrieve the phone number or email's label

NSString *emailLabel = emailValue.label; //This may be 'Work', 'Home', etc.
NSString *phoneNumberLabel = phoneNumberValue.label;
Comments