2009-10-29 5 views
5

Je sais qu'il peut y avoir plusieurs valeurs pour un e-mail, mais je ne suis pas sûr de savoir comment les parcourir.Comment obtenir les e-mails d'un contact du carnet d'adresses iPhone en tant que NSStrings?

Je peux obtenir une personne correctement.

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

... quelle est la prochaine étape? Si je tente d'imprimer la variable emails je reçois:

Emails: <NSCFType: 0x4018d40> 

Répondre

16

Il est parce que les courriels ne doivent pas être une chaîne, mais un tableau. Les gens peuvent avoir beaucoup d'emails!

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

Here sont des documents sur des choses que vous pouvez faire avec MultiValueLists

+0

Merci! Savez-vous comment je peux obtenir la taille du tableau "emails" afin que je puisse le parcourir? – marcgg

+0

J'ai ajouté un lien vers les documents où vous trouverez la méthode 'count' – coneybeare

+0

pour le compte J'ai fini par utiliser ceci: CFIndex count = ABMultiValueGetCount (emails); – marcgg

4

Le type de cette entrée est un ABMultiValue (en particulier, le type de ce champ est un kABMultiStringProperty). Voir "Using Multivalue Lists" pour savoir comment les lire. Voir le Address Book Objective-C Constants Reference pour ce que chaque propriété renvoie.

De plus, rappelez-vous que les fonctions AB sont soumises au Create Rule. Vous êtes responsable de la libération d'objets provenant d'une fonction avec le mot "Copier".

1

Dans iOS 9 l'ABFramework a été dépréciée pour le nouveau Contacts cadre:

je vous montre un exemple pour connecter toutes les adresses e-mail d'un CNContact:

CNContact * yourContact = //... 

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