2009-10-29 9 views
5

Sé que puede haber múltiples valores para un correo electrónico, pero no estoy seguro de cómo navegar a través de ellos.¿Cómo obtener los correos electrónicos de contactos de la libreta de direcciones de un iPhone como NSStrings?

Puedo obtener una persona correctamente.

ABRecordRef person = // getting a person; 
NSString* emails = (NSString *)ABRecordCopyValue(person, kABPersonEmailProperty); 

... ¿qué sigue? Si se intenta imprimir la variable emails me sale:

Emails: <NSCFType: 0x4018d40> 

Respuesta

16

Se debe a que los correos electrónicos no deben ser una cadena, pero una matriz. ¡Las personas pueden tener muchos correos electrónicos!

ABMultiValueRef emails = ABRecordCopyValue(person, kABPersonEmailProperty); 
CFStringRef email = ABMultiValueCopyValueAtIndex(emails, <INDEX>); 
NSLog((NSString *) email); 

Here son algunos documentos sobre las cosas que puede hacer con MultiValueLists

+0

Gracias! ¿Sabes cómo puedo obtener el tamaño de la matriz de "correos electrónicos" para poder navegar por ella? – marcgg

+0

Agregué un enlace a los documentos donde encontrará el método 'contar' – coneybeare

+0

para el conteo terminé usando esto: CFIndex count = ABMultiValueGetCount (correos electrónicos); – marcgg

4

El tipo de esta entrada es un ABMultiValue (en concreto, el tipo de este campo es un kABMultiStringProperty). Consulte "Using Multivalue Lists" para saber cómo leer estos. Consulte el Address Book Objective-C Constants Reference para conocer lo que devuelve cada propiedad.

Además, recuerde que las funciones AB están sujetas al Create Rule. Usted es responsable de liberar los objetos que obtiene de una función con la palabra "Copiar" en ella.

1

En iOS 9 del ABFramework ya no se utiliza para el nuevo marco Contactos:

os muestro un ejemplo para registrar cada dirección de correo electrónico de un CNContact:

CNContact * yourContact = //... 

for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){ 
    NSLog(@"%@",[emailLabeledValue value]); 
} 
Cuestiones relacionadas