¿Cómo leo las tags de los numbers de la libreta de direcciones?

Sé cómo get el número de teléfono de un ABRecordRef , pero lo que quiero ahora es get también el tipo del número, es decir, su label como una cadena:

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

Así es como obtengo los numbers:

 //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); } 

Probé todo tipo de cosas y he leído la reference de ABPerson y no sé cómo get el tipo de número de teléfono.

He descubierto cómo leer la label localizada del número de teléfono

 //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); } 

Aquí hay un fragment de código que crea una persona, agrega 2 contactos telefónicos y luego muestra cómo get la label y el valor de la propiedad del teléfono:

 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); 

En el código, itera sobre todos los valores múltiples y extrae la label y el número a medida que va, utilizando ABMultiValueCopyLabelAtIndex y ABMultiValueCopyValueAtIndex respectivamente.