These are the corrections to your code
NSString *theEmailAddressWeWantToObtain = @"";
ABPerson *aPerson = [[ABAddressBook sharedAddressBook] me];
ABMultiValueRef *emails = [aPerson valueForProperty:kABEmailProperty]; //No such thing as ABMultiValue; it's ABMultiValueRef
if(ABMultiValueGetCount(emails) > 0) //"emails" is not an array, so you can't use the "count" method
theEmailAddressWeWantToObtain = [emails valueAtIndex:0];
I'm not so familiar with Key Value Coding, so I'm not sure about your methods related to that.
This is the way I would do it
There are three email address stored in the email ABMultiValueRef
: home, work, and other emails. Try this code to get the home email:
NSString *email;
ABRecordRef currentPerson = (__bridge ABRecordRef)[[PSAddressBook arrayOfContacts] objectAtIndex:identifier];
ABMultiValueRef emailsMultiValueRef = ABRecordCopyValue(currentPerson, kABPersonEmailProperty);
NSUInteger emailsCount;
//Goes through the emails to check which one is the home email
for(emailsCount = 0; emailsCount <= ABMultiValueGetCount(emailsMultiValueRef);emailsCount++){
NSString *emailLabel = (__bridge_transfer NSString *)ABMultiValueCopyLabelAtIndex (emailsMultiValueRef, emailsCount);
if([emailLabel isEqualToString:@"Home"]){
if ((__bridge_transfer NSString *)ABMultiValueCopyValueAtIndex(emailsMultiValueRef, emailsCount) != NULL){
email = (__bridge_transfer NSString *)ABRecordCopyValue(currentPerson, kABPersonEmailProperty);
}
//If the last name property does not exist
else{
email = @"NULL";
}
}
}
CFRelease(emailsMultiValueRef);
If you have any questions about the code, just ask in the comments. Hope this helps!
EDIT:
The PSAddressBook
class mentioned in the code can be found here: https://github.com/pasawaya/PSAddressBook
if (CFStringCompare(emailLabel, kABHomeLabel, 0) == kCFCompareEqualTo)
(your email label should be aCFStringRef
and not be cast toNSString
, though) – Actor