iOS 9: une introduction au cadre de contacts

introduction

Avec iOS 9, OS X El Capitan et watchOS 2, Apple a introduit un tout nouveau framework, Contacts. Ce cadre fournit une approche orientée objet pour travailler avec les informations de contact de l’utilisateur et remplace la fonction Carnet d’adresses cadre.

Dans ce didacticiel, nous allons réimplémenter les fonctionnalités de base de l’application Contacts sur iOS afin que vous puissiez apprendre comment ces nouvelles API fonctionnent.

Conditions préalables

Ce didacticiel nécessite que vous exécutiez Xcode 7+ sur OS X Yosemite ou version ultérieure. Vous devrez également télécharger le projet de démarrage à partir de GitHub.

1. Accéder aux contacts

Nous allons d’abord utiliser le framework Contacts pour accéder aux contacts de l’utilisateur et les afficher sous forme de tableau. Ouvrez le projet de démarrage et accédez à MasterViewController.swift.

Si vous faites défiler vers le haut du fichier, vous pouvez voir que j’ai déjà ajouté une instruction d’importation pour le framework Contact. Cela nous donne accès aux classes, protocoles et constantes définis dans le framework.

dans le MasterViewController classe, remplacez l’implémentation vide de getContacts() méthode avec ce qui suit. Assurez-vous que vous ajoutez également le retrieveContactsWithStore(_:) méthode illustrée ci-dessous.

Passons en revue ce code étape par étape. Nous créons un CNContactStore instance et cet objet est utilisé pour communiquer directement avec le système Contacts sur iOS. Nous vérifions ensuite le statut d’autorisation de CNContactStore. S’il est indéterminé, nous demandons l’autorisation et récupérons les contacts en cas de succès. Si l’application est déjà autorisée, nous récupérons immédiatement les contacts de l’utilisateur.

dans le retrieveContactsWithStore(_:) méthode, nous enveloppons notre code dans un do-catch car deux des méthodes que nous utilisons sont des méthodes de lancement. Vous pouvez en savoir plus sur les méthodes de lancement et la gestion des erreurs sur Envato Tuts +.

dans le do clause, nous récupérons les groupes de contacts sur l’appareil. En utilisant le CNContact classe, nous créons un NSPredicate objet qui correspond à tous les contacts du premier des groupes que nous venons de récupérer.

Nous créons ensuite un tableau contenant un certain nombre de clés constantes. Ces clés sont également directement liées aux informations auxquelles votre application a accès. Pour les clés que vous ne spécifiez pas (par exemple, le numéro de téléphone), votre application ne pourra pas accéder à ces informations. Lorsque vous travaillez avec le framework Contacts, cela est appelé contact partiel car vous n’avez pas accès à toutes les informations d’un contact.

En utilisant le store objet, nous récupérons les contacts correspondant au prédicat que nous avons créé précédemment et avec les clés spécifiées. Nous attribuons le résultat au contrôleur de vue objects tableau à afficher dans la vue tableau. On force la vue table à se recharger sur le thread principal. Ceci est important car la récupération des contacts est effectuée sur un thread d’arrière-plan.

Il y a quelques éléments clés à prendre en compte:

  • le descriptorForRequiredKeysForStyle(_:) méthode de classe utilisée sur CNContactFormatter est un moyen pratique d’ajouter facilement toutes les clés nécessaires pour afficher le nom d’un contact.
  • Le prédicat que vous créez n’a pas besoin d’être pour un groupe de contacts. Cela peut être l’une des nombreuses choses, y compris la recherche d’un nom correspondant par exemple.
  • Dans le cadre des contacts, il n’y a aucun moyen pour votre application d’accéder directement à chaque contact. C’est pourquoi nous utilisons le code ci-dessus pour récupérer le premier groupe de contacts plutôt que tous les contacts.
  • Lors de la récupération des contacts, nous utilisons le unifiedContactsMatchingPredicate(_:keysToFetch:) méthode. Que signifie «unifié» dans ce contexte? Si un utilisateur a plusieurs contacts liés à la même personne, ils peuvent les lier ensemble dans l’application Contacts. Lorsque votre application tente d’accéder aux contacts de cet utilisateur, plutôt que d’en renvoyer plusieurs CNContact instances, le framework Contacts unifie ces derniers en un seul objet afin que votre application puisse afficher correctement les informations et les interpréter facilement.
En relation :  8 utilisations fantastiques des fichiers par l'application Google

Ensuite, nous devons afficher les informations du contact dans la vue tableau. dans le MasterViewController class, remplacez l’implémentation de tableView(_:cellForRowAtIndexPath:) avec ce qui suit:

Nous utilisons le CNContactFormatter classe pour récupérer facilement un String valeur du nom du contact. Nous obtenons également la première adresse e-mail du contact (représentée par un CNLabeledValue object) et obtenez sa valeur. UNE CNLabeledValue objet représente toutes les informations de contact pour lesquelles une information contextuelle peut être nécessaire. Ces objets contiennent une seule étiquette et une seule valeur. Dans l’exemple suivant, les mots de audacieux représentent l’étiquette d’un article et les mots dans italique représentent leur valeur.

  • Accueil adresse
  • Travail téléphone
  • Personnel email

Créez et exécutez votre application dans le simulateur. Lorsque vous exécutez l’application pour la première fois, vous devriez voir l’alerte suivante.

Alerte d'autorisation des contacts

Après avoir cliqué D’accord, la vue de table doit afficher un élément comme indiqué ci-dessous.

Vue de table remplie

Il est maintenant temps de remplir la vue détaillée lorsqu’un contact est sélectionné dans la vue tableau. Lors de la récupération des contacts, nous n’avons récupéré que suffisamment de clés pour accéder au nom et aux adresses e-mail d’un contact. Pour la vue détaillée de notre application, nous souhaitons également afficher leur adresse ainsi qu’une photo de profil. Pour ce faire, nous pourrions ajouter les clés supplémentaires dans le MasterViewController classe lors de la récupération des contacts. Cependant, nous allons récupérer à nouveau le même contact avec les clés dont nous avons besoin en utilisant l’identifiant du contact.

Ouvert DetailViewController.swift et remplacer la mise en œuvre de configureView() avec ce qui suit.

Décomposons la mise en œuvre. Nous obtenons une référence non emballée à l’élément de contact reçu du MasterViewController et nous créons un autre CNContactStore exemple.

Dans un do-catch déclaration, nous créons une autre keysToFetch tableau, cette fois avec les clés des adresses postales, des données d’image et des données d’image disponibles. Nous utilisons ensuite le magasin de contacts pour récupérer un nouveau CNContact instance avec les informations dont nous avons besoin en utilisant le unifiedContactWithIdentifier(_:keysToFetch:) méthode.

Encore une fois, notez que nous mettons à jour l’interface utilisateur sur le fil principal. Nous vérifions si le contact dispose ou non de données d’image à charger et les transformons en UIImage objet si possible. Nous peuplons le fullName et email étiquettes avec les informations correctes.

Bien que cela ne soit pas strictement nécessaire dans cet exemple, car nous savons quelles clés sont disponibles, nous vérifions si notre application peut accéder aux informations relatives aux adresses postales du contact. Notez que cette étape n’est qu’un exemple mais qu’elle doit toujours être effectuée avec des contacts si vous n’êtes pas sûr des informations auxquelles vous pouvez accéder.

Nous récupérons la première adresse postale du contact (représentée par le CNPostalAddress class) et formatez-la dans une chaîne en utilisant un CNPostalAddressFormatter exemple. le CNPostalAddress class fonctionne de la même manière que le CNContact classe mais il a des propriétés différentes, telles que la rue, la province et le pays.

Créez et exécutez votre application dans le simulateur et sélectionnez un contact dans la liste. La vue détaillée qui apparaît doit ressembler à ceci:

Affichage des détails du contact

2. Créer et mettre à jour des contacts

En plus de récupérer des contacts, vous pouvez également créer et mettre à jour des contacts existants à l’aide du CNMutableContact et CNSaveRequest Des classes. Ouvert AddContactViewController.swift et remplacez le contact propriété avec l’implémentation suivante:

Nous créons un CNMutableContact objet et attribuer un givenName et familyName à lui. Notez que nous utilisons le ?? ou opérateur de fusion nul. Si la valeur à gauche du ?? l’opérateur est nil, la valeur de droite est affectée à la place.

En relation :  Comment créer une liste de raccourcis clavier disponibles dans Word 2013

Nous créons un CNPhoneNumber objet pour représenter le numéro de portable saisi dans le champ de texte. Nous mettons ensuite ce nombre dans un CNLabeledValue objet avec la constante CNLabelPhoneNumberMobile étiquette. L’utilisation du CNPhoneNumber La classe est obligatoire car les numéros de téléphone peuvent être formatés de différentes manières dans diverses régions. Cette classe prend une chaîne et crée une valeur de numéro de téléphone avec laquelle le reste de l’infrastructure Contacts peut ensuite travailler. le mobileValue est ensuite placé dans un tableau et assigné au contact mutable phoneNumbers propriété.

Nous créons un similaire CNLabeledValue pour l’e-mail, en lui donnant le CNLabelHome étiquette. Cette valeur est ensuite affectée au contact emailAddresses propriété. Nous vérifions si une image a été attribuée au contact et, le cas échéant, attribuons ses données brutes au contact imageData propriété.

Pour enregistrer le contact, nous créons un CNSaveRequest objet et appelez son addContact(_:toContainerWithIdentifier:) pour indiquer au framework Contacts que nous voulons créer un nouveau contact. En passant nil comme identifiant, le nouveau contact sera enregistré dans le groupe de contacts par défaut.

En autre do-catch , nous demandons au magasin de contacts d’exécuter la demande de sauvegarde. Enfin, nous renvoyons le contact nouvellement créé pour une utilisation dans le reste de l’application.

Créez et exécutez votre application et cliquez sur le bouton plus dans le coin supérieur droit pour ajouter un nouveau contact. Remplissez le formulaire, ajoutez une photo et cliquez sur Terminé. Votre nouveau contact doit ensuite être ajouté à la vue de table du contrôleur de vue maître comme indiqué ci-dessous.

Créer un nouveau contact
Nouveau contact en vue tableau

La mise à jour d’un contact existant est très similaire à la création d’un nouveau. Bien que nous n’implémentions pas cela dans l’application, le code de mise à jour d’un contact existant serait similaire au suivant:

3. Contact Picker View Controller

Comme je l’ai mentionné dans la première partie de ce didacticiel, le framework Contacts n’a pas d’API pour accéder directement à chaque contact sur l’appareil de l’utilisateur. Il s’agit de protéger la confidentialité de l’utilisateur afin que les applications ne puissent pas lire tous leurs contacts et collecter des informations.

Heureusement, le cadre fournit un UIViewController sous-classe, CNContactPickerViewController, qui donne à l’utilisateur l’accès à tous les contacts stockés sur l’appareil.

Revisiter MasterViewController.swift et ajoutez une instruction d’importation en haut pour ContactUI.

Ensuite, faites le MasterViewController classe conforme à la CNContactPickerDelegate protocole.

Remplacer la mise en œuvre du addExistingContact() méthode de la MasterViewController classe avec ce qui suit:

Enfin, ajoutez la méthode suivante du CNContactPickerDelegate protocole au MasterViewController classe:

Créez et exécutez votre application une dernière fois et cliquez sur Ajouter existant dans le coin supérieur gauche. Un contrôleur de vue similaire au suivant doit apparaître:

Sélecteur de contacts

Si un contact dans le contrôleur de vue du sélecteur de contacts est sélectionné, le contrôleur de vue se ferme et le contact sélectionné est ajouté à la vue de table du contrôleur de vue maître.

Le contrôleur de vue du sélecteur de contacts prend également en charge plusieurs sélections, selon les méthodes implémentées par le délégué. Il peut également être personnalisé pour accéder à des propriétés spécifiques ainsi que pour filtrer les contacts qu’il affiche en fonction de prédicats. Pour plus d’informations, je recommande de lire le CNContactPickerViewController référence de classe et le CNContactPickerDelegate référence de protocole.

Conclusion

Comme vous pouvez le voir, le nouveau framework Contacts dans iOS 9, OS X El Capitan et watchOS 2 est une collection d’API très bien conçue et facile à utiliser. Vous devriez maintenant être à l’aise pour accéder, créer et mettre à jour des contacts sur l’appareil d’un utilisateur. Comme toujours, assurez-vous de laisser vos commentaires et commentaires dans les commentaires ci-dessous.

Moyens Staff
Moyens I/O Staff vous a motivé, donner des conseils sur la technologie, le développement personnel, le style de vie et des stratégies qui vous aider.