2012-01-31 5 views
4

Я знаю, как получить номер телефона из ABRecordRef, но то, что я хочу сейчас, чтобы также получить тип номера, т.е. его метку в виде строки:Как читать метки номеров телефонной книги?

const CFStringRef kABPersonPhoneIPhoneLabel; 
const CFStringRef kABPersonPhoneMainLabel; 
const CFStringRef kABPersonPhoneHomeFAXLabel; 
const CFStringRef kABPersonPhoneWorkFAXLabel; 
const CFStringRef kABPersonPhonePagerLabel; 

Вот как я получаю номера :

//get all phone numbers     
NSArray *phoneNumbersArray = (NSArray*)ABMultiValueCopyArrayOfAllValues(phoneNumberProperty); 
NSInteger numbersCounter = 0; 
for(numbersCounter = 0; numbersCounter < [phoneNumbersArray count]; numbersCounter++) 
{ 
    NSString currentPhoneNumber = [phoneNumbersArray objectAtIndex:indexPhoneNumber]; 

     // here i would like to read the type of phone number 
     // NSLog(@"NumberType:%@",numberType);      
} 

Я перепробовал все виды вещей, и я прочитал ABPerson Reference и я не знаю, как получить тип номера телефона?

ответ

15

У меня есть рисунок, как читать локализованную метку номера телефона

//get all phone numbers 
ABMultiValueRef phoneNumberMultiValue = ABRecordCopyValue(currentPerson, kABPersonPhoneProperty); 
NSUInteger phoneNumberIndex; 
for (phoneNumberIndex = 0; phoneNumberIndex < ABMultiValueGetCount(phoneNumberMultiValue); phoneNumberIndex++) { 

    CFStringRef labelStingRef = ABMultiValueCopyLabelAtIndex (phoneNumberMultiValue, phoneNumberIndex); 

    NSString *phoneLabelLocalized = (NSString*)ABAddressBookCopyLocalizedLabel(labelStingRef); 

    NSString *phoneNumber = (NSString *)ABMultiValueCopyValueAtIndex(phoneNumberMultiValue, phoneNumberIndex); 
    //memory management 
    [phoneLabelLocalized release]; 
    [phoneNumber release]; 
    CFRelease(labelStingRef); 
} 
2

Вот фрагмент кода, который создает человек, добавляет 2 телефонных контактов, а затем показывает, как получить на этикетке и значение свойства телефона:

ABMutableMultiValueRef multi = ABMultiValueCreateMutable(kABMultiStringPropertyType); 
ABMultiValueIdentifier multivalueIdentifier; 

ABMultiValueAddValueAndLabel(multi, @"(555) 555-1234", 
          kABPersonPhoneMobileLabel, &multivalueIdentifier); 
ABMultiValueAddValueAndLabel(multi, @"(555) 555-2345", 
          kABPersonPhoneMainLabel, &multivalueIdentifier); 

ABRecordRef aRecord = ABPersonCreate(); 

CFErrorRef anError = NULL; 

ABRecordSetValue(aRecord, kABPersonPhoneProperty, multi, &anError); 

CFRelease(multi); 

multi = ABRecordCopyValue(aRecord, kABPersonPhoneProperty); 

for (CFIndex i = 0; i < ABMultiValueGetCount(multi); i++) 
{ 
    CFStringRef phoneNumber, phoneNumberLabel; 

    phoneNumberLabel = ABMultiValueCopyLabelAtIndex(multi, i); 
    phoneNumber  = ABMultiValueCopyValueAtIndex(multi, i); 

    NSLog(@"%@ %@", (NSString *) phoneNumberLabel, (NSString *) phoneNumber); 

    CFRelease(phoneNumberLabel); 
    CFRelease(phoneNumber); 
} 

CFRelease(aRecord); 

CFRelease(multi); 

В коде перебирает все мульти- значения и извлекает метку и номер по мере ее использования, используя ABMultiValueCopyLabelAtIndex и ABMultiValueCopyValueAtIndex соответственно.

+0

Спасибо за ответ, я все готово понять, как читать этикетку. –

 Смежные вопросы

  • Нет связанных вопросов^_^