Как мне прочитать номерные метки телефонной книги? - PullRequest
4 голосов
/ 31 января 2012

Я знаю, как получить номер телефона от 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 , и я не знаю, как узнать тип номера телефона?

Ответы [ 2 ]

15 голосов
/ 01 февраля 2012

Я уже понял, как прочитать локализованную метку номера телефона

//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 голосов
/ 31 января 2012

Вот фрагмент кода, который создает человека, добавляет 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 соответственно.

...