Top Banner
451

iPhone iPad

Jul 09, 2015

Download

Documents

Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript

Dveloppez vos applications pour

iPhone, iPod Touch, iPad

Copyright

2010 Micro Application 20-22, rue des Petits-Htels 75010 Paris 1re dition - Mai 2010

Auteur

Jean-Pierre IMBERT Toute reprsentation ou reproduction, intgrale ou partielle, faite sans le consentement de MICRO APPLICATION est illicite (article L122-4 du code de la proprit intellectuelle). Cette reprsentation ou reproduction illicite, par quelque procd que ce soit, constituerait une contrefaon sanctionne par les articles L335-2 et suivants du code de la proprit intellectuelle. Le code de la proprit intellectuelle nautorise aux termes de larticle L122-5 que les reproductions strictement destines lusage priv et non destines lutilisation collective dune part, et dautre part, que les analyses et courtes citations dans un but dexemple et dillustration.

Avertissement aux utilisateurs

Les informations contenues dans cet ouvrage sont donnes titre indicatif et nont aucun caractre exhaustif voire certain. A titre dexemple non limitatif, cet ouvrage peut vous proposer une ou plusieurs adresses de sites Web qui ne seront plus dactualit ou dont le contenu aura chang au moment o vous en prendrez connaissance. Aussi, ces informations ne sauraient engager la responsabilit de lEditeur. La socit MICRO APPLICATION ne pourra tre tenue responsable de toute omission, erreur ou lacune qui aurait pu se glisser dans ce produit ainsi que des consquences, quelles quelles soient, qui rsulteraient des informations et indications fournies ainsi que de leur utilisation. Tous les produits cits dans cet ouvrage sont protgs, et les marques dposes par leurs titulaires de droits respectifs. Cet ouvrage nest ni dit, ni produit par le(s) propritaire(s) de(s) programme(s) sur le(s) quel(s) il porte et les marques ne sont utilises qu seule n de dsignation des produits en tant que noms de ces derniers. ISBN : 978-2-300-028021 ISSN : 1950-0289 MICRO APPLICATION 20-22, rue des Petits-Htels 75010 PARIS Tl. : 01 53 34 20 20 Fax : 01 53 34 20 00 http://www.microapp.com Support technique : galement disponible sur www.microapp.com

Retrouvez des informations sur cet ouvrage ! Rendez-vous sur le site Internet de Micro Application www.microapp.com. Dans le module de recherche, sur la page daccueil du site, entrez la rfrence 4 chiffres indique sur le prsent livre. Vous accdez directement sa che produit.

2802

Avant-proposDestine aussi bien aux dbutants quaux utilisateurs initis, la collection Guide Complet repose sur une mthode essentiellement pratique. Les explications, donnes dans un langage clair et prcis, sappuient sur de courts exemples. En n de chaque chapitre, dcouvrez, en fonction du sujet, des exercices, une check-list ou une srie de FAQ pour rpondre vos questions. Vous trouverez dans cette collection les principaux thmes de lunivers informatique : matriel, bureautique, programmation, nouvelles technologies...

Conventions typographiquesAn de faciliter la comprhension des techniques dcrites, nous avons adopt les conventions typographiques suivantes :j j

gras : menu, commande, bote de dialogue, bouton, onglet. italique : zone de texte, liste droulante, case cocher, bouton

j j

radio. Police bton : Instruction, listing, adresse internet, texte saisir. : indique un retour la ligne volontaire d aux contraintes de la mise en page.

Il sagit dinformations supplmentaires relatives au sujet trait.

Met laccent sur un point important, souvent dordre technique quil ne faut ngliger aucun prix.

Propose conseils et trucs pratiques.

Donne en quelques lignes la dnition dun terme technique ou dune abrviation.

Chapitre 11.1.

Premiers pas

17

1.2. 1.3. 1.4.

1.5. 1.6. 1.7.

Crer un projet avec XCode ............................................ 19 Lancer XCode ............................................................ 19 Crer un projet ........................................................... 20 Grer le projet ............................................................ 23 Composer linterface utilisateur ....................................... 25 Tester lapplication ...................................................... 28 Finaliser lapplication ................................................... 30 Ajouter un chier au projet ............................................. 30 Dclarer le logo de lapplication ....................................... 32 Agrmenter lapplication ............................................... 34 Mettre notre image dans la vue ....................................... 35 Challenge ................................................................. 36 Check-list .................................................................. 38

Chapitre 22.1.

Interactions simples

39

2.2.

2.3.

2.4.

2.5.

Programmation oriente objet ........................................ 41 Objets ...................................................................... 42 Classes .................................................................... 43 Messages ................................................................. 44 Mcanisme Cible-Action ............................................... 44 Crer les outlets .......................................................... 45 Prparer linterface utilisateur ......................................... 47 Connecter les outlets .................................................... 50 Dclarer les actions ...................................................... 51 Dnir les actions ........................................................ 52 Connecter les cibles ..................................................... 57 Construire et tester lapplication Convertisseur1 ................... 59 Hirarchie des classes de Convertisseur1 ........................... 60 Hritage ................................................................... 60 Hirarchie des vues ..................................................... 62 Manipulation des objets en Objective-C ............................. 63 Dclaration ............................................................... 63 Dnition .................................................................. 68 Messages ................................................................. 68 Proprits ................................................................. 69 Cration ................................................................... 70 Libration ................................................................. 72 Check-list .................................................................. 73

Chapitre 33.1.

Gestion de la mmoire

75

3.2.

Diagnostiquer les fuites mmoire avec Leaks ....................... 77 Zombi ...................................................................... 77 Dtecter les fuites mmoire ............................................ 78 Diagnostiquer les fuites mmoire ..................................... 82 viter les fuites mmoire ............................................... 84 Compteur de rfrences ................................................ 84 Gestion des proprits .................................................. 84

4

Sommaire

3.3.

3.4.

Responsabilits des objets ............................................. 88 Amliorer Convertisseur1 .............................................. 90 Instances manipules ................................................... 90 Mise en conformit avec la rgle ...................................... 91 Rfrences obsoltes ................................................... 94 Check-list .................................................................. 98

Chapitre 44.1.

Motifs fondamentaux

99

4.2.

4.3. 4.4.

4.5.

Mcanisme de dlgation ............................................ 101 Dlgu .................................................................. 101 Dlguer le champ dollar ............................................. 102 Dlgu pour un champ de texte .................................... 105 Dclarer un protocole ................................................. 107 Lancement de lapplication ........................................... 108 Structurer une application ............................................ 114 Amliorer Convertisseur1 ............................................ 115 Retrouver la virgule .................................................... 115 Localiser lapplication ................................................. 120 Utiliser le motif KVC ................................................... 125 Autres amliorations .................................................. 129 Motif MVC ............................................................... 133 Challenges .............................................................. 134 Amliorer encore Convertisseur1 ................................... 134 Explorer les contrles simples ....................................... 135 Check-list ................................................................ 140

Chapitre 55.1.

Applications multivues

143

5.2.

5.3.

5.4.

5.5.

5.6.

Application de type utilitaire ......................................... 145 Comprendre le fonctionnement dun utilitaire .................... 145 Activer une vue modale ............................................... 153 Application Convertisseur2 ........................................... 154 Composer la vue principale .......................................... 154 Paramtrer le taux de conversion ................................... 155 Factoriser le dlgu de champ de texte ........................... 156 Finaliser les contrleurs de vue ...................................... 159 Communiquer entre les deux contrleurs ......................... 166 Messages dalerte ...................................................... 168 Afficher une alerte ...................................................... 169 Feuilles daction ........................................................ 172 Dlgu de feuille daction ........................................... 174 Dlgu dalerte ........................................................ 174 Barre donglets ......................................................... 175 Crer une barre donglet .............................................. 175 Utiliser un contrleur de barre donglets ........................... 177 Modier la navigation par onglets .................................. 180 Barres de navigation ................................................... 181 Crer une barre de navigation ....................................... 182 Utiliser une barre de navigation ..................................... 182 Checklist ................................................................. 183

Sommaire

5

SOMMAIRE

Chapitre 66.1.

Contrles complexes

185

6.2.

6.3.

6.4.

Utiliser un slectionneur .............................................. 187 Slectionneur de date ................................................. 187 Slectionneur standard ............................................... 196 Source de donnes .................................................... 200 Adapter le slectionneur au contexte ............................... 202 Utiliser les conteneurs Cocoa ........................................ 205 Tableaux NSArray ...................................................... 205 Dictionnaires NSDictionary ........................................... 207 Conteneurs mutables .................................................. 208 Utiliser les Vues en table .............................................. 208 Prsentation gnrale ................................................. 208 Crer une vue en table ................................................. 211 Afficher la table ......................................................... 212 Ragir une slection ................................................. 218 Ajouter un lment .................................................... 221 Pour aller plus loin ..................................................... 228 Checklist ................................................................. 228

Chapitre 77.1.

Persistance des donnes

231

7.2.

7.3.

Utiliser le framework Core Data ...................................... 233 Dcrire le modle de donnes ....................................... 234 Comprendre le fonctionnement de Core Data ..................... 239 Formuler des requtes ................................................ 247 Ajouter un objet ........................................................ 251 Supprimer un objet .................................................... 254 Utiliser les listes de proprits ....................................... 258 Format des listes de proprits ...................................... 258 Utilisation des listes de proprits .................................. 259 Mise en pratique ........................................................ 260 Checklist ................................................................. 264

Chapitre 88.1.

Dessins et animations

267

8.2.

8.3.

8.4.

Animer les images ..................................................... 269 Images animes ........................................................ 269 Sonoriser une application ............................................ 273 Dplacer une image .................................................... 274 Dessiner avec Quartz2D ............................................... 282 Principe de fonctionnement .......................................... 282 Mise en pratique ........................................................ 284 Primitives graphiques ................................................. 289 Dbuter la 3D avec OpenGL ES ...................................... 290 Prsentation dOpenGLES ............................................ 291 Intgration dans Cocoa Touch ....................................... 291 Exemple dapplication ................................................. 295 Checklist ................................................................. 299

6

Sommaire

Chapitre 99.1.

Tapes, touches et gestes

301

9.2.

9.3.

9.4.

Comprendre les vnements ......................................... 303 Classe UIResponder ................................................... 303 vnements lmentaires ............................................ 304 cran Multi-Touch ...................................................... 306 Traiter les vnements ................................................ 307 Recevoir les vnements ............................................. 307 Notication dvnements ........................................... 310 Tapes multiples ......................................................... 312 Mettre en uvre les gestes ........................................... 313 Chiquenaude ............................................................ 313 Pincement ............................................................... 317 Checklist ................................................................. 320

Chapitre 10 Appareil photo10.1.

321

10.2.

10.3.

10.4. 10.5.

10.6.

Slectionner une photo ............................................... 323 Codage de linterface .................................................. 323 Codage du contrleur de vue ......................................... 325 Classe UIImagePickerController ..................................... 328 Protocole UIImagePickerControllerDelegate ...................... 330 Prendre des photos .................................................... 331 Adapter linterface utilisateur ........................................ 331 Adapter le slectionneur de photos ................................. 331 Enregistrer ses photos ................................................ 332 Grer une image sous Core Data .................................... 332 Enregistrer dans lalbum .............................................. 334 diter les photos ........................................................ 336 Envoyer ses photos .................................................... 336 Classe MFMailComposeViewController ............................ 337 Protocole MFMailComposeViewControllerDelegate ............. 338 Challenge ................................................................ 339 Checklist ................................................................. 339

Chapitre 11 Go-localisation11.1.

341

11.2.

11.3.

Dterminer sa position ................................................ 343 Technologies de go-localisation .................................... 343 Classe CLLocationManager .......................................... 343 Protocole CLLocationManagerDelegate ............................ 347 Classe CLLocation ...................................................... 348 Challenge ................................................................ 349 Dterminer lorientation gographique ............................ 349 Mise en uvre du compas magntique ............................ 350 Calibration magntique ............................................... 351 Classe CLHeading ...................................................... 351 Framework MapKit ..................................................... 352 Afficher une carte ....................................................... 352 Connatre la zone affiche ............................................. 354 Contrler la zone affiche ............................................. 357 Apprhender la vue satellite .......................................... 358

Sommaire

7

11.4.

Annoter la carte ......................................................... 359 Checklist ................................................................. 360

Chapitre 12 Acclromtres12.1.

363

12.2. 12.3.

12.4.

Utiliser les acclromtres ........................................... 365 Visualiser lacclration ............................................... 366 Visualiser la verticale .................................................. 369 Filtrer les donnes ..................................................... 372 Dterminer les mouvements de lappareil ......................... 375 Connatre lorientationde lappareil ................................. 375 Retour sur la classe UIDevice ........................................ 377 Sabonner aux changements dorientation ........................ 377 Orienter automatiquement les vues ................................ 378 Checklist ................................................................. 381

Chapitre 13 Spcicits de liPad13.1.

383

13.2.

13.3.

13.4.

Un SDK, deux cibles ................................................... 385 Choisir sa cible de dploiement ...................................... 385 Crer une application universelle ................................... 387 Nouveauts de linterface visuelle .................................. 387 Recommandations gnrales ........................................ 387 Vues modales ........................................................... 389 Vues contextuelles ..................................................... 390 Vues scindes ........................................................... 392 Reconnaissance des gestes .......................................... 396 Gestes de base .......................................................... 396 Utiliser un analyseur de geste ........................................ 399 Synchroniser les analyseurs ......................................... 404 Checklist ................................................................. 405

Chapitre 14 Annexe14.1. 14.2.

407

14.3.

pilogue ................................................................. 409 Politique dApple ....................................................... 409 Les diffrents statuts de dveloppeur ............................... 409 Diffusion des applications ............................................ 410 Signature du code ...................................................... 411 Certicats ................................................................ 412 Processus de diffusion ................................................ 412 Senregistrer comme dveloppeur .................................. 413 Sinscrire au programme des dveloppeurs ....................... 413 Certier un dveloppeur .............................................. 417 Tester son application sur un appareil .............................. 420 Diffusion limite de son application ................................. 426 Diffuser son application sur lAppStore ............................ 434

Chapitre 15 Index

439

8

Sommaire

INTRODUCTIONPour qui est ce livre ?Ce livre est destin tous ceux qui souhaitent dvelopper leur propre application pour iPhone, iPod Touch ou pour iPad. Il vous accompagnera dans ltude de la programmation pour ces quipements, dans la dcouverte des outils de dveloppement dApple et du langage Objective-C ; et jusqu la distribution de votre application sur lAppStore.

iPhone, iPod Touch, iPadNous employons le terme iPhone pour voquer indistinctement liPhone liPod Touch ou liPad. Lorsquune caractristique est disponible uniquement sur lun ou lautre de ces appareils, nous le prcisons en indiquant par exemple : "cette caractristique nest pas disponible sur iPod Touch".

Vous explorerez les techniques permettant dutiliser les caractristiques les plus innovantes de liPhone (acclrateur, go-localisation, capacits graphiques, gestes, etc.) et serez certainement sduit par la

9

INTRODUCTION

dsarmante facilit avec laquelle vous mettrez en uvre ces techniques en utilisant les frameworks et le SDK dApple. Cet ouvrage est destin ceux qui ont dj une connaissance de la programmation dapplications logicielles. Si ce nest pas le cas, nous vous recommandons la lecture de Dbutez en Programmation (ditions Micro Application).

Dvelopper pour iPhone ou pour iPad ?Les applications dveloppes pour iPhone et iPod Touch peuvent tre excutes sur iPad. Lutilisateur a alors la possibilit de visualiser linterface dans sa taille originale ou dans une taille double. linverse, une application dveloppe pour iPad ne peut gnralement pas tre excute sur iPhone ou iPod Touch, ne serait ce que pour la taille de lcran. Pour ces trois appareils, il faut utiliser le SDK iPhone OS. Il est donc a priori plus intressant de dvelopper pour iPhone plutt que seulement pour iPad. La plupart des chapitres de cet ouvrage traitent donc de liPhone et de liPod Touch. Le dernier chapitre traite des spcicits de liPad et de la ralisation dapplications qui sadaptent lappareil sur lequel elles sexcutent.

De quoi avez-vous besoin ? Comment lobtenir ?Le matrielSDK AppleLe SDK Apple ne fonctionne pas sur un PC sous Windows ou Linux.

Lenvironnement de dveloppement utilis dans cet ouvrage est le SDK 3.2 qui permet de dvelopper des applications pour iPhone, iPod Touch et iPad. Il ne peut sexcuter que sur un Macintosh processeur Intel dot du systme dexploitation Snow Leopard (Mac OS X 10.6) ou ultrieur.

10

Introduction

Intel ou PowerPCDurant de longues annes, une particularit des Macintosh dApple tait de fonctionner sur un processeur de la famille PowerPC, dvelopp en collaboration avec IBM et Motorola, et pas sur un processeur de la famille Pentium ou quivalent comme les PC. partir du dbut des annes 2000, lcart de performances entre ces deux types de processeur sest progressivement accru en faveur dIntel, si bien que Steve Jobs a annonc en juin 2005 le changement de processeur. Tous les Macintosh partir de 2006 sont processeur Intel et conviennent pour le dveloppement sur iPhone.

Si ce nest dj fait, il vous faudra donc imprativement vous procurer un Mac si vous voulez dvelopper des applications pour iPhone.

Le Refurb StoreApple commercialise des produits reconditionns sur son site marchand http://store.apple.com/fr. Il est possible dy faire de bonnes affaires. Si vous tes tudiant, pensez aussi aux offres spciales "ducation" dApple.

Figure 1 : Les produits reconditionns sur lApple StorePlusieurs revendeurs commercialisent galement des machines doccasion, soyez sr de choisir un Mac processeur Intel.

Le logicielLenvironnement de dveloppement est disponible gratuitement sur le site des dveloppeurs dApple http://developer.apple.com. Dans la suite

De quoi avez-vous besoin ? Comment lobtenir ?

11

de cet ouvrage, nous emploierons le terme de SDK (Software Development Kit) pour dsigner lenvironnement de dveloppement.

Inscription obligatoireLinscription sur le site des dveloppeurs dApple est obligatoire pour tlcharger le SDK. Cette inscription est gratuite, elle vous permettra galement daccder aux ressources techniques du site des dveloppeurs (vidos dapprentissage, documentation technique, exemples de code source, forum des dveloppeurs).

lheure o nous rdigeons ces lignes, le SDK est disponible en version 3.1.2 qui permet de dvelopper des applications pour les versions 2 et 3 diPhone OS. Il est fourni au format .dmg (format dimage disque standard sur Mac OS X) et sa taille est environ de 2,7 Go ; il faut gnralement plusieurs heures pour le tlcharger. Vous obtiendrez un SDK complet et dexcellente qualit :

j j j

outils de dveloppement ; frameworks iPhone/iPod Touch/iPad et Mac OS X ; simulateur diPhone et diPad pour tester vos applications sur votre Macintosh ; outils et instruments divers (mesure de performance, recherche de bogues, ateliers de composition graphique, etc.).

j

1 Double-cliquez sur le chier que vous venez de tlcharger ; une fentre du Finder souvre qui vous permet de visualiser le contenu de limage disque. 2 Double-cliquez sur le chier iPhone SDK ; le programme dinstallation sexcute et suit le processus standard sur Mac OS X : approbation de la licence dutilisation des outils de dveloppement puis du kit iPhone, personnalisation de linstallation (laisser les paramtres par dfaut) et installation.

Installation et droits dadministrationLinstallation du SDK ncessite les droits dadministration de lordinateur.

12

Introduction

Figure 2 : Contenu de limage disque du SDK iPhone

Un appareil de testVous pourrez tester plusieurs applications de ce livre en utilisant le simulateur fourni avec le SDK mais votre satisfaction sera dcuple lorsque vous excuterez votre application sur votre appareil. Il nest gnralement pas ncessaire de disposer dun appareil spcique pour effectuer vos tests ; liPhone, liPod Touch ou liPad que vous utilisez quotidiennement fera laffaire. Si vous souhaitez amliorer les tests avant de diffuser votre application, vous devrez disposer de plusieurs appareils, par exemple un iPhone 3G, un iPhone 3GS, un iPod Touch et un iPad. Certaines personnes de votre entourage disposent srement de ces appareils et seront sans doute ers de vous aider tester vos applications. An de viser une plus large diffusion, il faudra tester vos applications non seulement sur plusieurs appareils mais aussi sous plusieurs versions dOS. Il vaudra mieux ce moment-l que vous disposiez dappareils dont lusage sera rserv aux tests ; vous risquez davoir moins damis si les changements dOS ont provoqu des pertes de donnes sur les appareils quils vous ont cons.

Linscription au programme des dveloppeurs iPhoneCette inscription payante, moins de 100 5 par an, est indispensable pour tester son application sur un appareil rel. Elle vous permettra de :j

tester ou diffuser en mode Priv vos applications sur des appareils rels (jusqu 100) ;

De quoi avez-vous besoin ? Comment lobtenir ?

13

j j j

diffuser vos applications sur lAppStore (et gagner de largent) ; disposer des versions Bta de liPhone OS ; accder certaines informations spciques.Linscription se fait sur le site web des dveloppeurs (http://developer.apple.com). Le processus dinscription et de prparation aux tests rels est dtaill en annexe.

Une petite prsentationLes lments de basePour dvelopper une application logicielle, nous avons besoin des lments suivants :j

Un langage de programmation ; pour dvelopper sur liPhone OS, ce sera Objective-C. Des outils de dveloppements (diteur, compilateur, composition de linterface graphique, dbogueur, etc.) : nous utiliserons principalement XCode et Interface Builder. Une bibliothque dAPI (Application Programming Interface) permettant au code crit dans le langage de programmation daccder aux fonctions fournies par le systme dexploitation ; sur les systmes Mac OS X et iPhone OS, ces bibliothques se nomment des frameworks. Si vous tes familier de la terminologie PC/Windows, les DLL sont lquivalent des frameworks.

j

j

Nous commencerons notre tude par la dcouverte des outils XCode et Interface Builder et du langage Objective-C puis nous aborderons progressivement les diffrents frameworks diPhoneOS. Vous avez vraisemblablement dj entendu parler de Cocoa Touch. Il sagit de la partie de liPhone OS que nous utiliserons le plus souvent tout au long de notre parcours. Cocoa Touch est compos de 2 frameworks :j

UIKit prend en charge la gestion de linterface utilisateur (UI pour User Interface) :

diffrents lments de linterface utilisateur (boutons, champs de texte, etc.) ; gestion des vnements (tapes et gestes) ; fonctionnement gnral des applications.

14

Introduction

j

Foundation contient des classes utilitaires et des interfaces de haut

niveau vers les fonctions du systme : classes de collection (tableaux, ensembles et dictionnaires) ; classes utilitaires (dates, chanes de caractres, etc.) ; accs vers le gestionnaire de chiers, les fonctions graphiques, laccs au rseau, etc.

Spcicits du dveloppement sur iPhone/ iPod touch/iPadLe dveloppement dapplication pour iPhone OS prsente peu de difficults ; il existe de nombreux points communs avec le dveloppement pour un ordinateur. Il faudra cependant tenir compte des limitations technologiques de ces objets patants : cran de petite taille, ncessit dconomiser lnergie, limitation de la mmoire. Quelques consquences de ces limitations sont dtailles ci-aprs :

j

Une seule application sexcute un instant donn (si lon excepte le systme dexploitation) ; la premire consquence est quil est impossible de crer une application qui tourne en tche de fond. Une seule fentre est affiche lcran. Chaque application possde un bac sable (sandbox), un systme de chiers priv qui contiendra toutes ses donnes (chiers de paramtres et chiers de donnes) ; il est impossible deux applications daccder au mme chier et donc dchanger leur virus. La taille dcran est limite 480 x 320 pixels sur iPhone et iPod Touch, et 1024 x 768 pixels sur iPad. La taille de RAM dun iPhone est de 128 Mo, approximativement la moiti de cette mmoire est utilise par lOS ; lapplication en cours dexcution doit se contenter denviron 64 Mo, il faudra conomiser la mmoire.

j j

j

j

Langage Objective CObjective-C est le langage de programmation "naturel" sur iPhone OS et aussi sur Mac OS X. Il est vrai que ce langage est rarement utilis sur dautres plateformes mais prsente de nombreuses simi-

Une petite prsentation

15

larits avec le langage Java plus largement employ. Objective-C est une extension "objet" du langage C, au mme titre que C++, mais beaucoup plus simple que celui-ci et plus facile apprendre.

Pour aller plus loinCe livre vous expliquera toutes les techniques fondamentales mises en uvre dans les frameworks de liPhone OS. Il vous donnera les cls qui vous permettront de continuer votre exploration et de dvelopper des applications dont la seule limite sera votre imagination.

Do you speak English ?Ou plutt, Do you read english ? Pour aller plus loin, il vous faudra exploiter la riche documentation dApple celle intgre lenvironnement de dveloppement et celle disponible sur le site des dveloppeurs. Cette documentation est en anglais. Ce sera donc un atout si vous tes laise avec la langue de Shakespeare.

Tout nest pas perduSi vous tes allergique langlais, tout nest pas perdu. Pour aller plus loin, il sera alors indispensable de vous inscrire sur un forum de dveloppeurs franais o vous trouverez toujours une bonne me pour vous aider et vous transmettre son savoir, par exemple http: //forum.macbidouille.com ou www.pommedev.com.

Les applications que nous dtailleronsAu fur et mesure de notre parcours dans les frameworks de liPhone, nous dvelopperons quelques applications. Vous pourrez les utiliser telles quelles sur votre iPhone et mme les amliorer. En voici la liste :j j j j

HelloWorld graphique ;

Convertisseur de monnaie ; Prts aux amis ; Dtecteur de verticale.

Bonne exploration !

16

Introduction

PREMIERS PAS

Crer un projet avec XCode .................................................................................... 19 Composer linterface utilisateur ........................................................................... 25 Tester lapplication ...................................................................................................... 28 Finaliser lapplication ................................................................................................. 30 Agrmenter lapplication ......................................................................................... 34 Challenge ........................................................................................................................ 36 Check-list ......................................................................................................................... 38

17

CHAPITRE 1

Dans ce chapitre, nous crerons notre premire application. Comme le veut la tradition, il sagira dun "Hello World". Rien de trs spectaculaire donc mais ce sera loccasion de prendre en main les trois outils fondamentaux du SDK : XCode, Interface Builder et iPhone Simulator, le simulateur diPhone et diPad.

1.1. Crer un projet avec XCodeLancer XCodeXCode est lapplication qui va nous permettre de :j j j

grer nos projets ; grer et diter les chiers de code source ; construire et tester nos applications.

Un projet est lensemble des donnes ncessaires pour construire une application :j j j j

code source ; ressources (images, sons, etc.) ; liste des frameworks utiliss ; informations complmentaires (chier dinformation, paramtrage de la construction, etc.).

Pour crer un projet, il faut dabord lancer lapplication XCode. Linstallation standard du SDK place cette application dans le dossier /Developer/Applications. Double-cliquez sur licne XCode.

Figure 1.1 : Localisation de lapplication XCode

1.1. Crer un projet avec XCode

19

Si cest la premire fois que vous lancez XCode, la fentre daccueil apparat lcran. Vous pouvez fermer cette fentre.

Figure 1.2 : Fentre daccueil de XCode

Accder plus facilement XCodeVous aurez vous servir intensment de XCode. Il sera plus pratique davoir lapplication disposition rapidement en la gardant dans le Dock.

Figure 1.3 : Garder XCode dans le Dock

Crer un projetProcdez ainsi : 1 Sous XCode, activez la commande New Project du menu File. Vous pouvez galement cliquer sur Create a new Xcode project dans le panneau daccueil.

20

1. Premiers pas

Figure 1.4 : Cration dun projet

LAssistant New Project saffiche, vous permettant de choisir le type de projet que vous souhaitez crer.

Figure 1.5 : Assistant Nouveau Projet

1.1. Crer un projet avec XCode

21

XCode prend en charge plusieurs types de projet. Lorsquon cre un projet, il faut choisir le bon modle. An de vous faciliter le choix, la partie gauche de lAssistant prsente les groupes de modles. Dans la suite de louvrage, nous choisirons toujours le groupe Application pour iPhone OS. 2 Slectionnez View-based Application, vriez que le menu droulant Product est bien slectionn sur iPhone et cliquez sur le bouton Choose.

Les autres modles dapplicationNous verrons les autres modles dapplications dans la suite de cet ouvrage.

3 Un panneau saffiche qui vous permet de nommer le projet en cours de cration. Saisissez HelloWorld dans la zone de texte Save As puis cliquez sur le bouton Save.

Figure 1.6 : Panneau de sauvegarde

22

1. Premiers pas

Le dossier de projetXCode cre un dossier, du mme nom que le projet, et y insre les chiers composant le projet. Ce dossier recevra vos propres chiers (images, icones, ). Il est cr par dfaut dans votre dossier Documents. Vous pouvez choisir un autre emplacement avant de cliquer sur le bouton Save.

ce stade, nous avons cr le dossier de projet et la fentre de projet de XCode saffiche.

Grer le projetLa fentre de projet permet de grer tous les lments dun projet.

Figure 1.7 : La fentre de projet

Cette fentre est compose des lments suivants :j j

une barre doutils en haut ; la zone des Groupes et Fichiers (Groups and Files) sur la partie gauche de la fentre, qui structure les diffrentes informations et les chiers composant le projet ; la Vue Dtaille au centre de la partie droite de la fentre, dans laquelle on peut visualiser les attributs principaux de chacun des composants du projet ;

j

1.1. Crer un projet avec XCode

23

j

j

une Zone ddition en bas de la partie droite de la fentre qui nous permettra dditer les chiers du projet (cest dans cette zone que nous saisirons le code source de lapplication) ; une Barre dtat en bas de la fentre ; nous y lirons les messages mis par XCode lors de la construction de lapplication.

Structure mais pas sous-dossiersLes chiers sont rpartis sous XCode en Classes, Autres Sources, Ressources, etc. Cette structuration est indpendante de la faon dont les chiers sont structurs en sous-dossiers dans le dossier du projet ; par dfaut, seul un sous-dossier Classes est cr ; tous les autres chiers sont " plat" dans le dossier du projet.

Nous verrons lutilisation de ces diffrentes parties dans la suite du livre. Pour lheure, et si ce nest pas dj le cas, slectionnez HelloWorld dans la zone des Groupes et Fichiers pour afficher la liste de tous les chiers du projet dans la Zone Dtaille. XCode a cr pour nous les chiers suivants :j

Les chiers de type .framework sont des liens vers les frameworks diPhone OS ncessaires pour notre application HelloWorld :CoreGraphics.framework pour les fonctions de base de laffichage graphique ; Foundation.framework pour les accs aux fonctions de base du systme (chiers, rseau, etc.) ; UIKit.framework qui contient toutes les classes dobjet de base pour crer une application sous Cocoa Touch (boutons, champs

de texte, etc.).j

j

j

j

HelloWorld-Info.plist est le chier des proprits de lapplication ; nous utiliserons bientt ce chier. HelloWorld.app est notre application. Son nom apparat en rouge pour signaler que lapplication nest pas encore cre. Les chiers de type .pch sont des chiers intermdiaires dans le processus de construction de lapplication ; nous ne nous en occuperons pas. Les chiers .m (chier des dnitions) et .h (chiers des dclarations) contiennent les codes source Objective-C de lapplication :

24

1. Premiers pas

main.m linstar de main.c en langage C contient le code de la fonction main excute au lancement de lapplication ; nous naurons gnralement pas modier ce chier. HelloWorldAppDelegate.h et HelloWorldAppDelegate.m contiennent le code source du Dlgu de lapplication.

et HelloWorldViewController.m contiennent le code source du Contrleur de la Vue principale de lapplication. Ces chiers sont crs par XCode car nous avons utilis le modle View-based Application la cration du projet.HelloWorldViewController.hj

Les chiers de type .xib sont des chiers NIB.

Les Dlgus et les Contrleurs sont des motifs de conception (Design Pattern) abondamment utiliss dans la programmation Cocoa Touch et que nous expliquerons trs bientt. Les chiers NIB contiennent des objets prts lemploi, endormis en quelque sorte, qui sont rveills lorsque le chier est charg dans lapplication. Linterface utilisateur en particulier est dnie dans les chiers NIB, cest pourquoi ces derniers sont dits avec loutil Interface Builder. Dcouvrons sans plus tarder cet outil.

1.2. Composer linterface utilisateurSous XCode, vriez que dans le menu overview de la barre doutils, la valeur Active SDK est bien positionne sur iPhone Simulator 3.1.3.

Figure 1.8 : Activation du SDK pour le simulateur diPhone

Vous modierez la valeur du SDK actif pour tester votre application dans diffrents environnements :1.2. Composer linterface utilisateur

25

j j j j

Simulator 3.1.3 pour tester sur le simulateur diPhone ; Simulator 3.2 pour tester sur le simulateur diPad ; Device 3.1.3 pour tester sur un iPhone ou iPod Touch rels ; Device 3.2 pour tester sur un iPad rel.

1 Sous XCode, double-cliquez sur le chier HelloWorldViewController.xib dans la Zone Dtaille de la fentre de projet ; Interface Builder se lance.

Figure 1.9 : Interface Builder

2 Trois fentres apparaissent. De gauche droite : une fentre dont le titre est le nom du chier NIB que lon vient douvrir, cest le contenu du chier NIB ; une fentre dans laquelle nous composerons la Vue (View) de notre interface utilisateur ; une fentre Library qui contient les objets que nous utiliserons pour composer linterface utilisateur. 3 Cherchez lobjet Label dans la fentre Library et faites-le glisser sur la Vue de notre projet (voir Figure 1.10). 4 Slectionnez le Label nouvellement dpos sur la Vue an de le positionner o vous souhaitez (voir Figure 1.11).

26

1. Premiers pas

Figure 1.10 : Objet Label dans la fentre Library

Figure 1.11 : Label positionn sur la Vue principale de lapplication

1.2. Composer linterface utilisateur

27

5

Double-cliquez sur le Label pour slectionner le texte et saisissez HelloWorld. Enregistrez le chier (commande Save du menu File), puis revenez dans XCode et cliquez sur le bouton Build and Run de la barre doutils pour construire et lancer lapplication.

6 Il est possible quune bote de dialogue apparaisse pour signaler que nous navons pas enregistr tous les chiers que nous avons modis. Cliquez alors sur le bouton Save All.

Figure 1.12 : Sauvegarder les chiers modis

Lapplication HelloWorld est construite par XCode et lance dans le simulateur diPhone

1.3. Tester lapplicationiPhone Simulator est loutil qui nous permet de tester les applications

sur Mac. Il sagit de la premire tape de test. Bien sr, il faudra tester lapplication sur des appareils rels avant de la diffuser au public. Le test sur simulateur est intressant ; il permet de dboguer plus facilement lapplication (voir Figure 1.13). Explorez les menus du simulateur. On peut basculer et mme secouer virtuellement lappareil. Une caractristique intressante est la possibilit de tester rapidement notre application sur des versions diffrentes diPhone OS : menu Matriel, sous-menu Version. Explorez galement le simulateur, comme si vous utilisiez votre iPhone (cliquez sur le gros bouton en bas de liPhone an de revenir lcran daccueil). Les applications Photos, Contacts et Safari fonctionnent normalement ; on pourra ainsi tester les applications utilisant les photos et les contacts de liPhone.28

1. Premiers pas

Figure 1.13 : Simulateur diPhone

Gestes avec 2 doigtsLes gestes avec 2 doigts sont simuls en maniant la souris tout en pressant la touche [Alt] du clavier. Essayez avec lapplication Safari.

Vous pouvez aussi lancer votre application sur le simulateur diPad en slectionnant le SDK iPhone Simulator 3.2 sous XCode.

Figure 1.14 : Simulateur diPad

En explorant le simulateur, vous verrez que le logo permettant de lancer notre application HelloWorld est un carr blanc. Nous amliorerons cela immdiatement.

1.3. Tester lapplication

29

Figure 1.15 : Application sans logo

1.4. Finaliser lapplicationNous allons maintenant ajouter un logo notre application HelloWorld.

Revenez dans lapplication XCode et choisissez sur votre ordinateur limage que vous souhaitez utiliser comme logo. Il est recommand de choisir une image carre au format PNG.

Changer dapplicationSur Mac OS X, on peut changer rapidement dapplication par la combinaison de touches X+[].

Lajout du logo se fait en deux temps : 1 Ajoutez limage au projet. 2 Dclarez cette image comme tant le logo de lapplication.

Ajouter un chier au projet1 Dans XCode, slectionnez Resources dans HelloWorld dans la zone Groupes et Fichiers de la fentre du projet et activez la commande Add to project du menu Project. Le panneau standard de Mac OS X permettant de choisir un chier saffiche. 2 Recherchez limage dsire laide de ce panneau et cliquez sur le bouton Add.

30

1. Premiers pas

Figure 1.16 : menu Project de XCode

Un panneau saffiche pour que vous puissiez prciser la faon dont vous souhaitez ajouter le chier au projet.

Figure 1.17 : Ajout dun chier au projet

Lorsque la case Copy items into destination groups folder de ce panneau est coche, le chier slectionn est copi dans le dossier du projet et rang dans le groupe slectionn (en loccurrence Resources).

1.4. Finaliser lapplication

31

3 Cochez cette case. Par dfaut, la case HelloWorld est coche dans la liste Add To Targets. Cela signie que le chier que nous ajoutons sera copi dans le dossier des ressources de lapplication HelloWorld lors de la construction. 4 Laissez cette case coche et cliquez sur le bouton Add. 5 Limage apparat dans la liste des chiers du projet. Slectionnez ce chier dans la zone groupes et chiers pour vrier son contenu dans la zone ddition.

Figure 1.18 : Limage est ajoute au projet

Vous savez maintenant ajouter un chier un projet. Vous procderez exactement ainsi chaque fois que vous aurez besoin dajouter une image, une vido, un son ou tout autre chier un projet.

Dclarer le logo de lapplicationIl faut maintenant indiquer que limage que nous venons dajouter doit tre utilise comme logo de lapplication HelloWorld. 1 Toujours sous XCode, slectionnez le chier HelloWorld-Info.plist dans le groupe Resources. Ce chier contient les proprits de lapplication ; le logo est une de ces proprits. Lorsque le chier est slectionn, son contenu apparat dans la zone ddition.

32

1. Premiers pas

2 Slectionnez la zone de texte ct de la proprit Icon File et saisissez-y le nom du chier contenant le logo.

Figure 1.19 : Nom du chier contenant le logo

3 Cliquez sur le bouton Build and Go de la barre doutils de XCode. Si votre application est toujours en train de sexcuter dans le simulateur, une bote de dialogue saffiche pour vous prvenir et vous demander si vous souhaitez arrter lexcution en cours. Cliquez sur OK.

Figure 1.20 : Arrter lexcution en cours

1.4. Finaliser lapplication

33

4 Le cas chant, acceptez denregistrer les chiers modis (vous venez de modier HelloWorld-Info.plist). Lapplication sexcute sur le simulateur diPhone. Cliquez sur le gros bouton du simulateur pour vrier votre logo.

Figure 1.21 : HelloWorld avec logo

1.5. Agrmenter lapplicationNous nallons pas nous arrter en si bon chemin. Nous agrmenterons notre application par une illustration car pour linstant, elle est un peu triste. Choisissez une autre image et ajoutez-la au projet HelloWorld sous XCode.

34

1. Premiers pas

Reportez-vous la section prcdente si vous ne vous souvenez plus comment on ajoute un chier au projet.

Figure 1.22 : Une nouvelle image est ajoute au projet

Mettre notre image dans la vuePour rendre visible cette image lors de lexcution de lapplication, il faut retourner sous Interface Builder an de modier linterface utilisateur. 1 Dans la fentre Library dInterface Builder, cliquez sur le bouton Media pour obtenir la liste de tous les chiers de type media (Image, Vido ou Son) de votre projet.

Figure 1.23 : Media du projet disponible sous Interface Builder

1.5. Agrmenter lapplication

35

2 Faites glisser limage souhaite sous lobjet Label laide de la souris. Si vous faites attention pendant ce positionnement, vous verrez apparatre des lignes pointilles de couleur bleue. Ces lignes de positionnement vous aide aligner lobjet que vous tes en train de dplacer.

Figure 1.24 : Application avec un Label et une Image

Image au lancement de lapplicationSi votre projet contient une image dont le nom est Default.png, cette image sera automatiquement pendant le lancement de lapplication. Nous nous en souviendrons lorsque nous btirons des applications un peu longues au dmarrage.

1.6. ChallengeAvant de passer au chapitre suivant, nous vous invitons modier les attributs graphiques des objets Label et Image de notre interface utilisateur an de dcouvrir les diffrentes possibilits. Pour modier les attributs dun objet : 1 Activez linspecteur laide du menu Tools sous Interface Builder et slectionner le premier onglet de la fentre Inspecteur.

36

1. Premiers pas

2 Slectionnez lobjet sur lequel vous souhaitez travailler pour en visualiser les attributs dans linspecteur et les diter.

Figure 1.25 : Menu Tools dInterface Buider

Figure 1.26 : Inspection des attributs de lobjet Label

1.6. Challenge

37

1.7. Check-listNous venons de terminer notre premire application pour iPhone. Pour cela, nous avons utilis :j

XCode an de :

crer un projet ; ajouter des chiers au projet ; modier les proprits de lapplication ; construire lapplication ; lancer son excution dans le simulateur.j

Interface Builder an de :

composer linterface utilisateur ; ajouter un media linterface utilisateur.j

Et le simulateur diPhone pour tester notre application.

Au passage, nous remarquons que cette ralisation a t obtenue sans saisir une seule ligne de code Objective-C. Cest le rsultat dune caractristique intressante du framework Cocoa Touch et des modles dapplications de XCode ; chaque modle permet de construire une application qui fonctionne sans modication, le dveloppeur se concentre sur lcriture du code pour le comportement quil veut ajouter. Notre application HelloWorld est imparfaite car nous ne pouvons pas interagir avec elle. Notre prochaine production sera plus satisfaisante et nous permettra dcrire nos premires lignes de code.

38

1. Premiers pas

INTERACTIONS SIMPLESProgrammation oriente objet .............................................................................. 41 Mcanisme Cible-Action .......................................................................................... 44 Hirarchie des classes de Convertisseur1 ........................................................ 60 Manipulation des objets en Objective-C ........................................................... 63 Check-list ......................................................................................................................... 73

39

CHAPITRE 2

Notre objectif dans ce chapitre sera de raliser une application pour notre prochain voyage aux tats-Unis. Nous voulons connatre lquivalent en euros des prix exprims en dollars. La premire version de notre application se prsentera ainsi. Nous la perfectionnerons ensuite.

Figure 2.1 : Application Convertisseur1

Vous devrez dabord patienter car il faut que vous compreniez ce quest la programmation oriente objet.

2.1. Programmation oriente objetLa programmation oriente objet est un style de programmation qui permet damliorer la testabilit, de faciliter la maintenance et donc de produire des logiciels de meilleure qualit aux fonctionnalits sont plus complexes. Nous nexposerons pas ici la thorie de la POO (Programmation oriente objet). Notre ambition se limitera comprendre comment nous utiliserons cette thorie dans le langage Objective-C, langage objets, et avec les frameworks de Cocoa Touch, qui contiennent les objets prdnis dont nous aurons besoin. La terminologie POO employe sera celle du dveloppement pour iPhone OS.

2.1. Programmation oriente objet

41

Nous traiterons ici les notions lmentaires ; dautres notions plus avances seront voques plus loin.

ObjetsUn objet Objective-C permet de reprsenter un objet du monde "rel" ou manipulable par lutilisateur. Par exemple, un label ou une image sur une interface sont des objets, lapplication que nous dveloppons est un objet, et nous aurons besoin plus loin de crer nos propres objets : un livre prt, une monnaie convertir, etc. Les objets dun langage de programmation comprennent :j

un tat, cest--dire la situation de lobjet un moment donn de sa vie. Par exemple ltat dun objet bouton pourrait contenir ; sa position sur la fentre ; limage actuellement affiche ; limage afficher si lon clique sur le bouton, etc.

j

un comportement, cest--dire toutes les actions dont lobjet est capable : cliquer sur un bouton (ou toucher le bouton pour se conformer la terminologie iPhone OS).

Figure 2.2 : Reprsentation dun objet

Objets du langage Objective-CUn objet comprend des variables dinstance et des mthodes. Les variables dinstance permettent de reprsenter ltat de lobjet, et les mthodes permettent de reprsenter son comportement.

42

2. Interactions simples

Ne vous inquitez pas si vous ne comprenez pas tout de suite les subtilits induites par cette dnition ; cela viendra avec la pratique. Les variables dinstance sont des variables du langage Objective-C. On peut galement utiliser des variables du langage C puisque Objective-C en est une extension. Pourquoi parle-t-on dinstance ? Simplement pour prciser la porte de la variable ; elle est accessible uniquement depuis lune des mthodes de lobjet (linstance) et inaccessible depuis "lextrieur" de lobjet.Si vous avez besoin de vous rafrachir la mmoire ou dapprendre les bases du langage C, reportez-vous lannexe B.

ClassesLes informaticiens emploient rarement le terme Objet car il est ambigu (et les informaticiens naiment pas lambigut), ils emploient les termes Classe ou Instance. Une classe est un modle qui permet de reproduire des instances. La classe est un type dobjet, linstance est un objet particulier de ce type.

Figure 2.3 : Une classe et 2 instances du mme type

ClasseUne classe est un modle (type) dobjet qui permet de dnir les variables dinstances et les mthodes qui devront exister pour toutes les instances de cette classe.

2.1. Programmation oriente objet

43

Chose1 et Chose2 sont deux instances de la classe Chose. Chaque instance possde ses propres variables dinstance, mme si elles ont le mme nom dni par la classe.

MessagesLorsquune mthode est excute, elle doit pouvoir accder aux variables dinstance de lobjet. Il faut donc que le programmeur prcise, lorsquil crit son programme, sur quelle instance il veut excuter cette mthode. On dit que le programmeur envoie un message lobjet.

MessageUn message est la demande transmise une instance pour excuter une mthode particulire dans le contexte de linstance (en utilisant les variables dinstances lui appartenant).

RcepteurLe rcepteur dun message est lobjet qui reoit le message.

Aprs cet intermde dexplications thoriques, voyons comment on utilise ces concepts pour programmer sous Cocoa Touch, en commenant par le mcanisme cible-action.

2.2. Mcanisme Cible-ActionNous allons mettre en pratique immdiatement le mcanisme cibleaction en dveloppant notre application Convertisseur1. La copie dcran en dbut de chapitre montre le rsultat auquel nous voulons arriver :j

un champ de texte dans lequel lutilisateur saisit le montant en dollars ; un champ de texte dans lequel lutilisateur peut lire le rsultat de la conversion du montant en euros.

j

Nous souhaitons que la conversion soit ralise pendant que nous inscrivons le montant en dollars ; la valeur en euros doit tout instant tre le rsultat de la conversion de la valeur en dollars. Nous avons donc besoin de trois objets :44

2. Interactions simples

j j

2 instances de la classe UITextField pour les champs de texte ; 1 objet charg de faire la conversion.

Figure 2.4 : Structure des objets pour lapplication Convertisseur1

Lobjet charg deffectuer les conversions sera une instance de la classe Convertisseur1ViewController ; nous verrons pourquoi dans un instant.

Crer les outletsNotre Convertisseur1ViewController a besoin de connatre les deux champs de texte puisquil faudra quil "lise" la valeur en dollars et quil "crive" la valeur en euros. Il a donc besoin de 2 variables dinstance de type "instance de classe UITextField". 1 Ouvrez XCode et crez un projet de type View-based Applicationcomme au chapitre prcdent. 2 Intitulez ce projet Convertisseur1 ; ce sera notre premire version du Convertisseur de monnaies. 3 Slectionnez le chier Convertisseur1ViewController.h dans la fentre de projet et modiez son contenu, dans la zone ddition, pour obtenir le texte suivant :#import @interface Convertisseur1ViewController : UIViewController { IBOutlet UITextField *labelDollar; IBOutlet UITextField *labelEuro; } @property (retain,nonatomic) UITextField *labelDollar; @property (retain,nonatomic) UITextField *labelEuro; @end

2.2. Mcanisme Cible-Action

45

Nous venons de dnir deux variables dinstance, labelDollar et labelEuro de type UITextField pour les instances de la classe Convertisseur1ViewController. La ligne de code IBOutlet UIText Field *labelDollar; signie que labelDollar est une variable de type UITextField * (les adeptes du C liront "est un pointeur sur une structure de type UITextField") et que de plus, cette variable est un outlet (dclar par IBOutlet). Quest-ce quun outlet ? Cest simplement le moyen de dire Interface Builder que lon souhaite connecter cette variable dinstance ; nous allons expliquer cela. Au passage, notons que le "IB" de IBOutlet signie Interface Builder.

OutletUn outlet est une sorte de variable dinstance, cest un pointeur vers un autre objet. Un outlet est congurable laide dInterface Builder.

Aprs avoir saisi les quelques lignes de code prcdentes dans le chier Convertisseur1ViewController.h, licne de ce dernier est grise dans la fentre de projet de XCode. Les icnes grises signalent les chiers qui ont t modis.

Figure 2.5 : Fichier Convertisseur1ViewController.h modi

4 Sauvegardez le chier que lon vient de modier soit par la combinaison de touches X+[S], soit en choisissant la commande Save du menu File sous XCode.

46

2. Interactions simples

Cliquez dans la zone dditionPour sauvegarder un chier sous XCode, il faut quil soit slectionn et il faut cliquer dans la zone ddition de la fentre de projet.

Prparer linterface utilisateur1 Double-cliquez sur le chier Convertisseur1ViewController.xib dans la fentre de projet sous XCode ; Interface Builder se lance. 2 Prparez linterface utilisateur de lapplication Convertisseur1 laide de 3 labels et de 2 champs de texte (Text Field).

Figure 2.6 : Interface utilisateur de Convertisseur1

Figure 2.7 : Champ de texte

2.2. Mcanisme Cible-Action

47

3 Si vous souhaitez que votre interface ait exactement le mme aspect, utilisez linspecteur pour modier les attributs graphiques des objets conformment au tableau.Tableau 2.1 : Configuration des objets de linterface Champ Montant en dollars Montant en euros Type Police Helvetica 17 Helvetica 17 Couleur Couleur par dfaut Couleur par dfaut Couleur par dfaut Convertisseur de Monnaies Label Helvetica Bold Oblique 24 Grape

Label Label

Text Field Helvetica 17

Rappelez-vous ; pour modier les attributs dun objet, on utilise linspecteur aprs avoir slectionn lobjet que lon veut modier.

Figure 2.8 : Attributs du label de titre

4 Cliquez sur la description de lattribut Font pour afficher la fentre ottante Fonts. Il faut cliquer sur la case de couleur Color-Text pour afficher la fentre ottante Colors (voir Figure 2.9).

Slection multipleVous pouvez slectionner simultanment plusieurs objets graphiques du mme type (label ou text field) an den modier les attributs graphiques en une fois avec linspecteur. Cliquez sur le premier objet puis cliquez sur les suivants en maintenant la touche [Maj] enfonce pour tendre la slection.

48

2. Interactions simples

Figure 2.9 : Fentres ottantes dattributs graphiques

Pour naliser notre interface, nous allons indiquer que nous souhaitons que le clavier numrique saffiche lorsque lutilisateur touchera le champ de texte pour saisir le montant en dollars convertir. 5 slectionnez ce champ de texte sur la vue et choisissez Numbers & Punctuation dans la liste droulante pour loption Keyboard dans linspecteur . Maintenant que notre interface utilisateur est termine, nous pouvons connecter les outlets de notre application aux objets que nous venons dagencer.

Figure 2.10 : Choix du clavier pour un champ de texte

2.2. Mcanisme Cible-Action

49

Connecter les outlets1 Toujours sous Interface Builder, slectionnez Files Owner dans la fentre du contenu du chier NIB puis slectionnez longlet Connections de linspecteur (le deuxime onglet en partant de la gauche).

Figure 2.11 : Slection de Files Owner

Nous dcouvrons dans linspecteur les deux outlets que nous avons ajouts dans le chier Convertisseur1ViewController.h. 2 Pour connecter un outlet un objet de linterface utilisateur, effectuez un cliquer-glisser-relcher allant du petit cercle droite de loutlet dans linspecteur jusqu lobjet que vous souhaitez rattacher.

Figure 2.12 : Connexion dun outlet un objet

3 Connectez loutlet labelDollar au champ de texte ct du label Montant en dollars puis connectez loutlet labelEuro au champ de texte ct du label Montant en euros.

Figure 2.13 : Les outlets connects 502. Interactions simples

Tester linterfaceLa combinaison de touches X+[R] sous Interface Builder provoque le lancement du simulateur diPhone pour visualiser linterface que nous venons de construire. Lapplication ne fonctionne pas mais nous pouvons activer tous les objets de linterface pour vrier leur comportement graphique.

Notre objet comprend 4 outlets alors que nous nen avons dni que 2. Les outlets supplmentaires sont obtenus par hritage. Nous tudierons ce concept important dans quelques pages. Pour le moment, nous terminons lapplication Convertisseur1.

Dclarer les actionsNous avons construit linterface utilisateur de notre application Convertisseur1, nous lui avons indiqu comment communiquer avec le cur de lapplication en dnissant des outlets et en tablissant les connexions. Il nous faut maintenant dnir prcisment le comportement de lapplication. Revenez dans XCode et compltez le chier Convertisseur1ViewController.h de la faon suivante :#import @interface Convertisseur1ViewController : UIViewController { IBOutlet UITextField *labelDollar; IBOutlet UITextField *labelEuro; } @property (retain,nonatomic) UITextField *labelDollar; @property (retain,nonatomic) UITextField *labelEuro; - (IBAction) changeValue; @end

Nous venons de dclarer une action dont le nom est changeValue.

ActionUne action est une mthode dinstance dont la vocation est dtre excute lorsquun vnement survient. Elle est congurable laide dInterface Builder.

2.2. Mcanisme Cible-Action

51

Nous souhaitons que cette action soit appele chaque fois que lutilisateur change le montant en dollar, et quelle calcule le montant en euros puis laffiche dans le champ adquat. La connexion entre laction et lvnement sera ralise laide dInterface Builder. Le comportement de laction est dcrit en Objective-C dans la dnition de laction.

Dnir les actionsSauvegardez le chier Convertisseur1ViewController.h que nous venons de modier et, toujours sous XCode, ouvrez le chier Convertisseur1ViewController.m.

Dclaration et Dnition linstar des langages C et C++, les dclarations et les dnitionssont spares en Objective-C. Par convention, une classe dobjets NomDeLaClasse est dcrite dans 2 chiers sources NomDeLaClasse.h et NomDeLaClasse.m.

Rgle de nommage des classesAn de faciliter la lecture du code source, il est dusage dadopter des rgles de nommage. En particulier, on essaiera de trouver un nom explicite ; il faut viter les noms abrgs (par exemple NdlC au lieu de NomDeLaClasse) ; ils nuiront la lisibilit et donc notre capacit modier le code dans lavenir. En Objective-C, le nom dune classe est une srie de mots accols et chaque mot commence par une majuscule y compris le premier mot, par exemple : NomDeLaClasse.

Le chier avec lextension .h contient la dclaration de la classe, interface en anglais, cest--dire tout ce qui est ncessaire pour utiliser une instance de cette classe ; le type et le nom de chaque variable dinstance et de chaque mthode. Le chier avec lextension .m contient la dnition de la classe, implementation en anglais, cest--dire le dtail du comportement de lobjet.

EncapsulationLencapsulation est le principe selon lequel on doit pouvoir utiliser un objet sans connatre le dtail de la faon dont cet objet travaille.

52

2. Interactions simples

Pour illustrer le principe dencapsulation, prenons un exemple : lorsque je veux dmarrer ma voiture je tourne la cl de contact et le moteur se met en marche ; jutilise linterface, cest simple. Imaginons tout ce que je devrais faire si je navais pas cette interface ; mettre en marche la pompe essence, rgler la richesse du mlange en fonction de la temprature du moteur, mettre le pignon du dmarreur en contact avec larbre du moteur, faire tourner le dmarreur pour lancer le moteur, activer les soupapes de faon synchronise avec la position des pistons et dans le mme temps injecter le mlange dans le moteur, dclencher les explosions dans les cylindres au bon moment (toujours en fonction de la temprature du moteur et enn expulser les gaz brls. Tous les objets, y compris les objets Objective-C, devraient tre aussi simples utiliser que ma voiture. Lencapsulation est importante pour faciliter la maintenance des applications. Lorsque nous sommes amens modier un objet, nous navons pas ncessairement besoin de modier tous les objets qui lutilisent ; nous pouvons changer de voiture, nous navons pas besoin de changer notre faon de la dmarrer.

Inclusion des dclarationsVous navez peut-tre pas fait attention mais nous avons dj utilis le principe dencapsulation. Dans notre chier Convertisseur1ViewController.h, nous employons les noms prdnis IBOutlet, IBAction, UIViewController et UITextField. O sont dnis tous ces noms ? Dans le framework UIKit diPhone OS. Comment indique-t-on quil faut utiliser ce framework ? La premire instruction du chier indique quil faut employer les dclarations du framework UIKit : #import .

#import#import demande au compilateur dinclure un chier dans le chier courant. Cette instruction est utilise principalement an de rcuprer les dclarations ncessaires pour employer un framework ou des objets dnis ailleurs.

Syntaxe :Fichier global

#import FichierAInclure

Le chemin daccs au chier inclure doit tre mis entre crochets lorsquil se situe dans la bibliothque des frameworks diPhone OS. Par exemple, #import .

2.2. Mcanisme Cible-Action

53

Fichier local

Le nom du chier inclure doit tre mis entre guillemets lorsquil se situe dans le mme dossier que le chier dans lequel il est inclus, par exemple : #import. "Convertisseur1ViewController.h"

Lorsque nous avons cr notre projet Convertisseur1 de type View-based Application, XCode a cr pour nous une classe Convertisseur1ViewController et ses 2 chiers .h et .m. Cest dabord dans cette classe que nous devons introduire le comportement de notre application et cest pourquoi nous modions les chiers Convertisseur1ViewController.h et Convertisseur1ViewController.m. Le chier .h sera inclus partout o ncessaire. Vous devinez o il faut linclure en tout premier lieu ? Dans le chier .m, bien sr ; cela permettra au compilateur de vrier que la dclaration et la dnition de notre classe sont cohrentes.

#import et #includeLes dveloppeurs C utilisent la clause #include. #import joue exactement le mme rle mais en vitant dinclure plusieurs fois le mme chier. UIKit.h, par exemple, est inclus dans presque tous les .h. Ds que lon inclut deux chiers .h dans le mme chier .m, on y inclut plusieurs fois le chier UIKit.h (les inclus de mes inclus sont mes inclus) ; le compilateur signalerait alors des erreurs car il naime pas que les mmes noms soient dclars plusieurs fois. La clause #import vite ce genre dinconvnient.

Regardez le contenu du chier Convertisseur1ViewController.m, XCode la prpar pour nous et il commence par linstruction #import "Convertisseur1ViewController.h".

Basculer entre dclaration et dfinitionSous XCode, la combinaison de touches X+z+[] permet de basculer du chier .h vers le chier .m et rciproquement. Cette astuce est trs utile ; vous aurez souvent passer de lun lautre pendant la saisie du code source.

Il nous reste terminer notre classe Convertisseur1ViewController.

Dnition de laction changeValueSi ce nest pas dj fait, slectionnez le chier Convertisseur1View Controller.m pour en visualiser le contenu dans la zone ddition de XCode. Modiez-le an dobtenir le code suivant :

54

2. Interactions simples

#import "Convertisseur1ViewController.h" @implementation Convertisseur1ViewController @synthesize labelDollar; @synthesize labelEuro; - (IBAction) changeValue { NSString *textDollar = labelDollar.text; float dollar = [textDollar floatValue]; float euro = dollar / 1.4908; NSString *textEuro = [[NSString alloc] initWithFormat: @"%.2f",euro]; labelEuro.text = textEuro; [textEuro release]; }

Lorsque vous saisissez ce code source (veillez le saisir trs prcisment tel que nous vous lindiquons) vous constatez que XCode vous propose de complter les mots au fur et mesure de la frappe. Cette fonctionnalit de XCode est la Terminaison de Code (Code Completion) et permet de gagner beaucoup de temps lors de la saisie de code source.

Saisie des crochets droits et des accoladesLes accolades { et } sont obtenues par les combinaisons de touches z+[(] et z+[)]. Les crochets droits [ et ] sont obtenus par les combinaisons de touches [Maj]+z+[(] et [Maj]+z+[)].

Utilisation de la Terminaison de CodeLors de la saisie, si le mot propos par XCode vous convient, pressez la touche []. Sil ne vous convient pas, continuez la saisie ou pressez la touche [chap] an dobtenir une liste de suggestions. Vous pouvez alors slectionner le mot appropri.

Figure 2.14 : Suggestions de la terminaison de code

Nous comprendrons bientt de faon dtaille ces quelques lignes de code et leur syntaxe particulire, et vous serez mme capable dcrire la fonction changeValue en seulement une ou deux lignes.55

2.2. Mcanisme Cible-Action

Nous avons prfr dcomposer les instructions pour vous aider en suivre la logique :j

Les instructions @synthesize servent gnrer les accesseurs pour les proprits labelDollar et labelEuro. Laction changeValue est ensuite dnie par les instructions entre les accolades { et }, soit dans lordre : Un objet de type NSString est dclar et initialis avec la valeur crite par lutilisateur dans le champ de texte labelDollar. Un nombre de type oat est dclar et initialis avec le montant en dollars. (Nous avons besoin dun nombre de type oat pour faire notre calcul de conversion en euros car on ne peut pas effectuer de calculs sur un objet de type NSString.) Un nombre de type oat est dclar et initialis avec le montant converti en euros, avec un taux de conversion de 1,4908 $ pour 1 5 (cest le taux officiel la date de rdaction de ces lignes). Un objet de type NSString est cr et initialis avec une chane de caractres reprsentant le montant en euros, avec une prcision de 2 chiffres aprs la virgule. Le montant en euros est affich dans le champ de texte labelEuro, lutilisateur peut le lire.

j

Lobjet NSString textEuro est dtruit car chaque appel de changeValue, un nouvel objet est cr ; il faut viter les fuites de mmoire. Nous voyons ici lintrt davoir dni des outlets ; notre action changeValue peut "lire" et "crire" les contenus des champs de texte connects aux outlets. Comme cest notre premier bout de code, il nest pas certain que nous layons saisi correctement. Sous XCode, enregistrez le chier modi et construisez lapplication sans lancer lexcution.

Vrifier le code sourceOn peut vrier le code source de lapplication en la construisant sans lexcuter. Sous XCode, slectionnez la commande Build du menu Build ou tapez la combinaison de touches X+[B]. Par exemple, si nous avons saisi LabelEuro la place de labelEuro, lerreur nous est signale dans la barre dtat de la fentre de projet et dans le code source.

56

2. Interactions simples

Figure 2.15 : Erreur signale la construction

Vriez que votre code source ne contient pas derreurs et corrigez ces dernires ventuellement avant de passer ltape suivante.

Connecter les cibles1 Retournez vers lapplication Interface Builder pour modier le chier Convertisseur1ViewController.xib. Slectionnez le champ de texte dans lequel nous aurons le montant en dollars et visualisez longlet Connections de linspecteur. Nous allons indiquer Interface Builder que nous souhaitons que laction changeValue du propritaire du chier Convertisseur1View Controller.xib (cest--dire une instance de la classe Convertisseur1View Controller) soit dclenche chaque modication, par lutilisateur, du contenu du champ de texte contenant le montant en dollar. Nous allons pour cela utiliser le mcanisme Cible-Action (Target-Action) de Cocoa-Touch. Pour mettre en uvre ce mcanisme nous avons besoin :j

dun objet dont les vnements sont observs ; le champ de texte contenant le montant en dollars ; dun vnement qui va dclencher laction ; ici ce sera lvnement Editing Changed ;

j

2.2. Mcanisme Cible-Action

57

j

j

dun objet qui va recevoir laction la cible ; notre instance de la classe Convertisseur1ViewController ; dune mthode activer sur la cible laction ; la mthode changeValue.

2 Effectuez un cliquer-glisser-relcher allant du petit cercle droite de lvnement Editing Changed dans linspecteur jusqu lobjet Files Owner dans la fentre du contenu du chier NIB.

Figure 2.16 : Connexion dune cible

Une liste sur fond gris saffiche en surimpression sur la cible que nous avons slectionne. 3 Cliquez sur changeValue, lunique ligne de cette liste. Cette liste nous permet de choisir une action parmi celles dnies pour la cible. Comme nous avons dclar une seule action sur notre cible, la liste comprend une seule ligne.

Figure 2.17 : Liste des actions dnies sur la cible

4 Slectionnez nouveau Files Owner pour visualiser ses connexions dans linspecteur.

Figure 2.18 : Connexions de Files Owner

58

2. Interactions simples

Construire et tester lapplication Convertisseur11 Sauvegardez le chier NIB sous Interface Builder et revenez sous XCode pour construire et lancer lapplication (X+[R]). 2 Si la construction ne fonctionne pas correctement, vriez que le SDK actif est le simulateur et vriez votre code source.

Figure 2.19 : Vriez que le SDK actif est le simulateur

3 Testez votre application sur le simulateur diPhone. Nhsitez pas tout essayer : saisir des chiffres et des lettres, dans le champ des montants en dollars et dans celui des montants en euros, etc.

Figure 2.20 : Test de lapplication Convertisseur1

Nous nous rendons compte de tous les petits dfauts de notre application. Il faudra lamliorer avant de rellement lutiliser :j

empcher que lutilisateur tape des lettres ;

2.2. Mcanisme Cible-Action

59

j j

j

j

pouvoir faire disparatre le clavier ; pouvoir effectuer les conversions dans les deux sens, des dollars en euros et vice-versa ; lorsquon revient dans lapplication, retrouver les montants tels quils taient lorsquon la quitte ; pouvoir modier facilement le taux de conversion.

Nous aborderons ces amliorations aprs avoir approfondi ce que nous venons de voir.

2.3. Hirarchie des classes de Convertisseur1Vous tes sans doute un peu frustr car nous venons de crer une application mais vous navez sans doute pas compris tous les dtails du code que nous avons crit. Nous allons approfondir tout cela et vous comprendrez mieux le code de Convertisseur1 la n de ce chapitre.

HritageNotre classe Convertisseur1ViewController offre deux outlets supplmentaires que nous navons pas dclars. Ils appartiennent notre classe par hritage. Nous avons reprsent larbre dhritage des objets que nous avons manipuls pour notre application Convertisseur1 (voir Figure 2.21).Convertisseur1ViewController hrite de ou "est une sorte de" UIViewController. En plus des variables dinstances et des mthodes que nous avons dnies pour Convertiseur1ViewController, ce dernier possde galement les attributs et le comportement de UIViewController ; en particulier les deux outlets supplmentaires que nous

avons vus prcdemment. Notre classe Convertisseur1ViewController contient, par hritage, tout le code des classes UIViewController, UIResponder et NSObject. Examinons plus attentivement la classe UITextField :j

NSObject est la classe de base ; tous les objets doivent driver (doivent hriter) de NSObject. UIResponder ; un Rpondeur est un objet possdant la capacit de recevoir des vnements et de les traiter ou de les transmettre soit

j

60

2. Interactions simples

par le mcanisme Cible-Action, soit au rpondeur suivant dans la chane des rpondeurs. Nous expliquerons plus loin la chane de rpondeurs.

Figure 2.21 : Graphe dhritage de Convertisseur1j

UIView ; une Vue est un objet qui apparat lcran et appartient la hirarchie des vues (voir ci-aprs). Une vue est galement un rpondeur puisquelle reoit et rparti les vnements crs par le systme lorsque lutilisateur touche cette vue sur lcran.

2.3. Hirarchie des classes de Convertisseur1

61

j

j

UIControl ; un Contrle est une vue particulire qui prsente une liste dvnements spciques et peut activer une action sur une cible pour chacun de ces vnements. UITextField ; un champ de texte est un contrle particulier (et donc aussi une Vue et un Rpondeur) qui permet lutilisateur de visualiser et modier une ligne de texte.

Et UILabel ? Vous devinez de quoi il hrite ? Rchissons Cest un objet, cela saffiche sur lcran, cest donc vraisemblablement une vue. Est-ce un contrle ? Peut-on congurer le mcanisme CibleAction partir dun UILabel ? Vous pouvez consulter longlet Connections de linspecteur sous Interface Builder, aprs avoir slectionn lun des deux labels de lapplication Convertisseur1, vous constaterez quaucun vnement nest dni pour un UILabel ; on ne peut pas dnir des Cibles-Actions pour un label. Donc UILabel hrite de UIView mais pas de UIControl.

Hirarchie des vuesChaque application dun iPhone affiche une fentre unique qui occupe tout lcran. Une fentre est un objet de type UIWindow qui hrite de UIView (une fentre est un type particulier de vue). Cette fentre contient gnralement une vue qui elle-mme contient une ou plusieurs vues et qui, leur tour, peuvent contenir des vues, etc. La fentre et toutes les vues incluses constituent la hirarchie des vues. La hirarchie des vues peut voluer pendant lexcution de lapplication. Par exemple dans lapplication Contacts, lorsque lutilisateur passe de la liste des contacts la visualisation dune che des contacts, lapparence visuelle de linterface volue ; la hirarchie des vues a chang. Vous pouvez visualiser la hirarchie de vues de lapplication Convertisseur1 sous Interface Builder, dans la fentre du contenu du chier NIB. Cliquez sur le bouton du milieu de la rubrique View Mode. Cliquez sur le triangle ct de lobjet View pour visualiser son contenu (voir Figure 2.22). Il ny a pas de fentre de type UIWindow dans le chier Convertisseur1ViewController.h. La racine de la hirarchie est une vue dont le nom est View, elle contient les 5 labels et les 2 champs de texte que nous y avons ajouts. La fentre se trouve en fait dans le chier MainWindow.xib, vous pouvez ouvrir ce chier pour vous en convaincre.

62

2. Interactions simples

Figure 2.22 : Hirarchie des vues de Convertisseur1

Toutes les applications pour iPhone sont structures de la mme faon :j

une fentre unique (UIWindow) qui restera affiche pendant toute lexcution de lapplication (elle est dcrite dans le chier MainWindow.xib) ; une ou plusieurs vues principales qui occupent chacune toute la fentre (chacune de ces vues est dcrite dans un chier NIB spcique).

j

Nous avons cr un projet de type View-based Application sous XCode pour construire notre application Convertisseur1. Ce type dapplication ne comprend quune vue principale, nous aurons loccasion de crer dautres types dapplication avec plusieurs vues principales.

2.4. Manipulation des objets en Objective-CAprs ces quelques lments thoriques, voyons comment on manipule les objets dans le langage Objective-C.

DclarationLa dclaration dune classe seffectue dans un chier source qui porte le nom de la classe et dont lextension est .h. Par exemple MaClasse.h pour la classe MaClasse. Une dclaration suit toujours le mme schma :

2.4. Manipulation des objets en Objective-C

63

j

Une instruction @interface prcisant le nom de classe dclare et le nom de la classe dont elle hrite ; cette dernire est appele la superclasse de la classe en cours de cration. Toutes les classes doivent driver dune superclasse. Un bloc, dlimit par des accolades, contenant les dclarations de chaque variable dinstance de la classe. Les dclarations de chaque mthode de la classe. Linstruction @end pour indiquer la n du bloc @interface :@interface MaClasse : SuperClasse { // dclaration des variables dinstance } // dclaration des mthodes @end

j

j j

CommentairesSur chaque ligne de code source, le texte partir de la double barre oblique "//", jusqu la n de la ligne, est considr comme un commentaire par le compilateur.

Dclaration des variables dinstanceChaque variable dinstance a un nom et un type. Vous choisissez le nom de chaque variable ; cest ce nom que vous utiliserez pour employer cette variable. Bien sr, deux variables dinstances ne peuvent porter le mme nom.type nom1, nom2, , nomN ;

On peut dclarer une ou plusieurs variables dans la mme instruction ; on utilise la virgule pour sparer les variables. Linstruction de dclaration se termine par un point-virgule.

Ne pas oublier le point-virguleLoubli du point-virgule en n dinstruction est une erreur courante que mme les programmeurs conrms peuvent faire. Le point-virgule est le marqueur de n dinstruction du langage C et du langage Objective-C.

Vous pouvez utiliser :j

Nimporte quel type dni dans le langage C (int, long, float, double, pointeur, etc.) ou un type labor laide des rgles du langage C (typedef).

64

2. Interactions simples

j

j

Un pointeur sur une classe dobjets, par exemple labelDollar de type UITextField * ; un pointeur sur une classe dobjet permet de manipuler les instances de cette classe ; Le type id, qui est un type prdni dans Objective-C, pointeur vers une classe non prcise ; on utilise le type id pour manipuler des instances dont on ne connat pas la classe.

Rgle de nommage des variablesComme les classes, les variables doivent porter un nom explicite et il faut viter les noms abrgs (par exemple lD au lieu de labelDollar). En Objective-C, le nom dune variable est une srie de mots accols et chaque mot commence par une majuscule sauf la premire lettre qui reste minuscule, par exemple : labelDollar.

Dclaration des mthodesNous arrivons aux caractristiques dObjective-C les plus droutantes pour les programmeurs C ou C++ : la dclaration et lappel des mthodes. Commenons par le plus facile, la dclaration dune mthode qui na pas de paramtres :// dclaration dune mthode dinstance - (type-de-la-valeur-de-retour) nomDeLaMethode ; // dclaration dune mthode de classe + (type-de-la-valeur-de-retour) nomDeLaMethode ;

Comme en C, le type est void si la mthode ne retourne pas de valeur. IBAction est quivalent void ; une action ne retourne pas de valeur.

Mthode dinstance / de classeUne mthode dinstance sexcute dans le contexte dune instance de classe, elle accde aux variables propres cette instance. Lors de son excution, une mthode de classe nest pas attache une instance particulire ; elle ne peut accder aux variables dinstance.

Variables de classe ?Contrairement dautres langages objet, il ny a pas de variables de classe en Objective-C, seulement des variables dinstance. Nous verrons comment nous en passer dans la suite de louvrage.

2.4. Manipulation des objets en Objective-C

65

Pour comprendre la dclaration des mthodes ayant des paramtres, nous allons dtailler un exemple :- (void)getCharacters:(unichar *)buffer range:(NSRange)aRange ;

Cet exemple dclare une mthode dinstance :j j j

dont le nom est getCharacters:range: ; qui ne retourne pas de valeur ; type de retour (void) ; dont le premier paramtre est de type pointeur sur un unichar unichar * (un unichar est un caractre Unicode) ; dont le second paramtre est de type NSRange (intervalle).

j

La mthode getCharacters:range: est une mthode dinstance de NSString qui permet dobtenir au format Unicode les caractres situs dans un intervalle donn dans la chane de caractre. Une mthode prend des paramtres lorsque son nom comprend des caractres deux-points, autant de paramtres que de caractres deux-points. Ceci est un peu droutant pour les programmeurs C ou C++ qui ont lhabitude de bien sparer le nom de la fonction de la liste des paramtres qui est mise entre parenthses. En Objective-C, on mlange. Vous verrez lusage que ce procd amliore la lisibilit du code ; le rle de chaque paramtre est identi.

Rgle de nommage des mthodesEn Objective-C, la rgle de nommage est identique pour les mthodes et les variables : une srie de mots accols et chaque mot commence par une majuscule sauf la premire lettre qui reste minuscule, par exemple : changeValue.

Accesseurs et ManipulateursEn respect du principe dencapsulation, les variables dinstance appartiennent en propre chaque instance, elles sont accessibles uniquement par une mthode dinstance de la mme classe. Comment faire si lon a besoin de modier ltat dun objet ? (voir Figure 2.23) Le seul moyen pour accder depuis un objet A une variable dinstance appartenant un objet B, est de dnir des mthodes dinstance dans la classe de lobjet B pour cet usage. La mthode qui permet dobtenir la valeur dune variable dinstance est appeles accesseur (getter). La mthode qui permet de dnir la valeur dune variable dinstance est appele manipulateur (setter).

66

2. Interactions simples

Figure 2.23 : Les variables dinstances sont prives

AccesseurLa mthode permettant dobtenir la valeur dune variable dinstance est appele accesseur. Laccesseur porte le mme nom que la variable dinstance, son type de retour est le type de la variable dinstance et il ne prend pas de paramtre.

@interface MaClasse : SuperClasse { // dclaration dune variable dinstance typeVar varInstance } // dclaration de laccesseur de varInstance - (typeVar) varInstance ; @end

ManipulateurLa mthode permettant de dnir la valeur dune variable dinstance est appele manipulateur. Le nom du manipulateur est construit en mettant une majuscule au nom de la variable puis en le prxant par set. Le manipulateur ne retourne pas de valeur (void) et prend un unique paramtre du mme type que la variable dinstance.

@interface MaClasse : SuperClasse { // dclaration dune variable dinstance typeVar varInstance ; } // dclaration du manipulateur de varInstance - (void) setVarInstance: (typeVar) nouvelleValeur ; @end

2.4. Manipulation des objets en Objective-C

67

Nous verrons que les proprits permettent de dclarer et dnir plus facilement les accesseurs et les manipulateurs.

DnitionLa dnition dune classe seffectue dans un chier source qui porte le nom de la classe et dont lextension est .m, par exemple MaClasse.m pour la classe MaClasse :j j j j

limportation du chier .h de la classe (clause #import) ; une instruction @implementation prcisant le nom de classe dnie ; les dnitions de chaque mthode de la classe ; linstruction @end pour indiquer la n du bloc @implementation :#import "MaClasse.h" @implementation MaClasse // dfinition des mthodes @end

La dnition dune mthode :j

commence par une ligne de code qui reprend la dclaration de la mthode sans le point-virgule la n ; se poursuit par un bloc dinstructions entre accolades.

j

Par exemple :#import "Convertisseur1ViewController.h" @implementation Convertisseur1ViewController - (IBAction) changeValue { NSString *textDollar = labelDollar.text; float dollar = [textDollar floatValu