2014-01-09 5 views
3

Я хочу знать, можно ли извлечь домашний номер телефона и рабочий номер телефона вместо домашнего факса или рабочего факса. Если нет, то почему это ограничение?ABPerson: Как получить домашний и рабочий телефоны человека (не FAX)

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

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, вы заметите, что есть много больше, чем меток, которые (не говоря уже о пользовательских из них). Как я могу их выбрать?

+1

Берут [смотрите здесь] (http://stackoverflow.com/a/10275572/312312) – Lefteris

+0

Это помогло немного больше. Я до сих пор не понимаю, почему мы получаем более прямой способ (const выше) для некоторых телефонов, но не для Work или Home. Если полагаться на (не упоминается в ссылках), сравнение строк является странным, но, по-видимому, оно решило мою проблему. – Berbare

ответ

1
//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); 
+0

Спасибо, но у меня уже есть код, похожий на этот. Мой вопрос был о чем-то другом. – Berbare

+0

Хмм, о чем вы спрашиваете, чем? :) Для пользовательских ярлыков вы просто имеете «phoneLabel» другое значение. –

1

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/