Récupérer une adresse email dans le ContactBook de l’iPhone

J’avais dit que je parlerais ici même des petites astuces ou gros problèmes rencontrés lors du développement de mon application iPhone. L’objectif est assez clair : faire gagner quelques précieuses heures aux prochains qui rencontreront les mêmes problèmes que moi. Le premier cas concret concerne le carnet d’adresse de l’iPhone.

L’idée est d’aller récupérer les informations concernant un contact que l’utilisateur aura désigné dans son carnet d’adresse. Je ne vais pas expliquer ici comment mettre en place l’interface de sélection d’un contact (le peoplePickerNavigationController). En effet, Mickaël Morvan le fait très bien dans son article sur développez : « iPhone SDK: Accès au carnet d’adresses de l’iPhone ».

Comme vous avez pu le voir, récupérer le nom et le prénom d’un contact sous forme de chaine de caractère est assez simple. Par contre, si on applique la même technique à l’adresse email (en utilisant kABPersonEmailProperty à la place de kABPersonLastNameProperty), on lève une exception Terminating_Due_To_Uncaught_Exception

Pourquoi donc ? La première chose à comprendre c’est qu’un contact n’a qu’un seul nom. Mais il peut avoir plusieurs adresses email… Par conséquent, un ABRecordCopyValue(mPerson, kABPersonEmailProperty) ne renverra pas une seule valeur mais une collection de valeurs ! Alors, évidement, quand on veut mettre ça dans un NSString ça ne passe pas.

Pour faire simple, on va considérer que seule la première adresse email nous intéresse (généralement c’est la principale). Ce qui revient à vouloir prendre la valeur à l’index 0 de la collection de valeurs. Ensuite, et bien on caste en string. Concrètement, voilà ce que ça donne :

NSString contactMail = (NSString *)ABMultiValueCopyValueAtIndex(ABRecordCopyValue(mPerson,  kABPersonEmailProperty), 0);

Après, il n’est pas dur de compléter en permettant de choisir une adresse email particulière (voir dans la littérature Apple du coté de ABMultiValue).

Mine de rien, le problème a l’air tout simple, mais il a fallu quelques heures pour en arriver là. Sans compter que toutes les recherches faites sont tombées sur des gens posant la question et n’ayant pas de réponse !

Cette entrée a été publiée dans Pro, avec comme mot(s)-clef(s) , , , . Vous pouvez la mettre en favoris avec ce permalien.

2 réponses à Récupérer une adresse email dans le ContactBook de l’iPhone

  1. Laurent dit :

    Effectivement, tu m’as permis d’économiser quelques heures !!! ;-)
    Merci pour ton post.

  2. Julien Quéré dit :

    Mais de rien, ravi que ça ait pu aider :)

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>