¿Cómo obtener los correos electrónicos de contacto de una libreta de direcciones de iPhone como NSStrings?

StackOverflow https://stackoverflow.com/questions/1645567

Pregunta

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.

Puedo contactar a una persona correctamente.

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

... ¿qué sigue? Si intento imprimir la variable emails obtengo:

Emails: <NSCFType: 0x4018d40>
¿Fue útil?

Solución

Es porque los correos electrónicos no deben ser una cadena, sino una matriz. ¡La gente puede tener muchos correos electrónicos!

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

Aquí hay algunos documentos sobre cosas que puede hacer con MultiValueLists

Otros consejos

El tipo de esta entrada es un ABMultiValue (específicamente, el tipo de este campo es un kABMultiStringProperty ). Consulte " Uso de listas de valores múltiples " para saber cómo leerlos. Consulte Objetivo de la libreta de direcciones-Referencia de constantes C para lo que devuelve cada propiedad.

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

En iOS 9, ABFramework ha quedado en desuso para el nuevo Marco de contactos :

Le 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]);
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top