Question

Je sais qu'il peut y avoir plusieurs valeurs pour un email, mais je ne sais pas comment les parcourir.

Je peux obtenir une personne correctement.

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

... et ensuite? Si j'essaie d'imprimer la variable emails , je reçois:

Emails: <NSCFType: 0x4018d40>
Était-ce utile?

La solution

C’est parce que les courriels ne doivent pas être une chaîne, mais un tableau. Les gens peuvent avoir beaucoup de courriels!

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

Voici quelques documents sur ce que vous pouvez faire avec MultiValueLists

Autres conseils

Le type de cette entrée est un ABMultiValue (plus précisément, le type de ce champ est un kABMultiStringProperty ). Voir " Utilisation de listes à plusieurs valeurs " pour savoir comment les lire. Voir le Référence des constantes Objective-C du carnet d'adresses pour chaque propriété renvoyée.

N'oubliez pas non plus que les fonctions AB sont soumises au Créer une règle . Vous êtes responsable de la libération des objets que vous obtenez d'une fonction avec le mot "Copier". en elle.

Sous iOS 9, ABFramework est déconseillé pour le nouveau Framework de contacts :

.

Je vous montre un exemple pour consigner chaque adresse électronique d'un contact numérique:

CNContact * yourContact = //...

for (CNLabeledValue* emailLabeledValue in yourContact.emailAddresses){
    NSLog(@"%@",[emailLabeledValue value]);
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top