ABPerson: Как получить домашние и рабочие телефоны человека (не факс)

Я хочу знать, можно ли извлечь номер домашнего телефона и номера рабочего телефона контакта вместо их домашнего или рабочего факса. Если нет, то почему это ограничение?

В ссылке упоминаются только следующие константы:

const ABPropertyID kABPersonPhoneProperty;  
const CFStringRef kABPersonPhoneMobileLabel;  
const CFStringRef kABPersonPhoneIPhoneLabel;  
const CFStringRef kABPersonPhoneMainLabel;  
const CFStringRef kABPersonPhoneHomeFAXLabel;  
const CFStringRef kABPersonPhoneWorkFAXLabel;  
const CFStringRef kABPersonPhoneOtherFAXLabel;  
const CFStringRef kABPersonPhonePagerLabel;

Но если вы используете свой iPhone, вы заметите, что этикеток гораздо больше (не говоря уже о пользовательских). Как я могу выбрать их?

2 ответа

//contactData is ABRecordRef
ABMultiValueRef phones = ABRecordCopyValue(contactData, kABPersonPhoneProperty);

for (CFIndex i=0; i < ABMultiValueGetCount(phones); i++) 
{
    NSString* phoneLabel = (NSString*) ABMultiValueCopyLabelAtIndex(phones, i);
    NSString* phoneNumber = (NSString*) ABMultiValueCopyValueAtIndex(phones, i);

    //for example
    if([phoneLabel isEqualToString:(NSString *)kABPersonPhoneMobileLabel])
    {
        //under phoneNumber you have a kABPersonPhoneMobileLabel value
    }
    .. add other standard labels
    else //custom label
    {

    }

    [phoneNumber release];
    [phoneLabel release];
}

CFRelease(phones);

kABHomeLabel и kABWorkLabel

if (CFStringCompare(phoneLabelRef, kABHomeLabel, 0) == kCFCompareEqualTo) {
        homePhone = (__bridge NSString *)phoneNumberRef;
} else if (CFStringCompare(phoneLabelRef, kABWorkLabel, 0) == kCFCompareEqualTo) {
        officePhone = (__bridge NSString *)phoneNumberRef;
}

Смотрите этот отличный учебник: http://www.appcoda.com/ios-programming-import-contact-address-book/

Другие вопросы по тегам