Utiliser les @protocol et la delegation pour faire communiquer 2 ViewControllers

AliGatorAliGator Membre, Modérateur
novembre 2010 modifié dans Actualités #1
Passage de paramètres entre deux ViewControllers : Delegate & @protocol

Ce tutoriel présente comment faire communiquer deux ViewControllers pour faire passer des paramètres de l'un à  l'autre en utilisant le mécanisme de délégation (delegate) et la notion de @protocol.

Il va ainsi vous montrer comment créer votre propre @protocol et déclarer un delegate à  une de votre classes perso et ainsi utiliser ce mécansime de delegation pour passer des informations d'un ViewController à  un autre

Réponses

  • muqaddarmuqaddar Administrateur
    00:38 modifié #2
    Super article Ali qui aidera énormément les débutants sur les problématiques pour faire communiquer des objets entre eux dans une application.

    Pour ma part, j'en utilise de plus en plus (des delegates) dans mes applications.

    C'est un concept fondamental en POO donc j'invite tous les nouveaux à  lire et comprendre ce tutoriel.

    Peut-être peux-tu ajouter 2 ou 3 lignes sur le @optionnal possible pour les méthodes déclarées du delegate. ;)
  • 00:38 modifié #3
    Je pense que ça mérite une seconde partie un peu plus tard mais uniquement concentré sur les delegates
  • DrakenDraken Membre
    00:38 modifié #4
    Et ça fera 50 euros de plus, en prime !

    Va falloir que je m'y mette aussi à  écrire des tutos, histoire de me payer un iPhone 4. ::)

  • AliGatorAliGator Membre, Modérateur
    00:38 modifié #5
    Je viens d'éditer le tuto pour rajouter une section sur les @optional et rajouter 2-3 infos (pourquoi déclarer la property delegate en assign, etc) ;)
  • muqaddarmuqaddar Administrateur
    00:38 modifié #6
    Super ! 
  • ImtheRipImtheRip Membre
    00:38 modifié #7
    Merci AliGator, c'est clair et instructif !
  • devulderdevulder Membre
    00:38 modifié #8
    dans 1289999350:

    Et ça fera 50 euros de plus, en prime !

    Va falloir que je m'y mette aussi à  écrire des tutos, histoire de me payer un iPhone 4. ::)


    Tu en fais un par mois et houpi tu l'as dans 12 mois :)

  • DrakenDraken Membre
    00:38 modifié #9
    Ou 10 par mois, et je l'ai dans UN mois !

  • lilivelilive Membre
    00:38 modifié #10
    C'est une bonne page construite très progressivement. Bravo AliGator.

    Petit à  petit la section des tutoriels prend du volume...

    dans 1290026150:

    Ou 10 par mois, et je l'ai dans UN mois !

    ... mais je vois que le rythme va changer!
  • DrakenDraken Membre
    00:38 modifié #11
    Oué !

  • hcyranohcyrano Membre
    00:38 modifié #12
    super, je vais revoir mon code  :D

    merci bcq
  • mushumushu Membre
    00:38 modifié #13
    Bonjour à  tous,

    Merci pour ce tutoriel qui m'a beaucoup éclairer sur l'utilité des protocoles.
    Avant de lire, j'implémentais mes protocoles gentiment parce qu'on m'a dit de le faire.
    Maintenant j'ai compris, ...un peu plus  :( mais une zone d'ombre subsiste:

    Après avoir suivi ton tuto à  la ligne pour mon projet en l'occurrence passage d'un NSMutableArray entre deux ViewController reliées modalement (hum...), ma méthode  didChangeCriteria: n'est pas appelée dans VC1 (NSlog à  l'appui).

    Quelqu'un aurait une idée du pourquoi ?
  • AliGatorAliGator Membre, Modérateur
    00:38 modifié #14
    Bonjour mushu,

    Peux-tu citer ici le code dans lequel tu appelles didChangeCriteria ?
    Dans l'autre sens, as-tu bien affecté la propriété delegate à  l'objet en question qui implémente cette méthode ?
  • mushumushu Membre
    00:38 modifié #15
    <br />- (void)enregistrer:(id)sender {<br />	[delegate joursSemaineViewController:self didRegister:joursBuffer];<br />	[self.navigationController popViewControllerAnimated:YES];<br />}<br />
    


    enregistrer: étant la méthode d'action d'un bouton

    je déclare bien que ma première ViewController implémente le protocole (avec les <>)
  • AliGatorAliGator Membre, Modérateur
    00:38 modifié #16
    Ok et ce code là , lui, il est bien appelé ?
    Et ta variable "delegate" elle n'est pas nil, elle a bien été affectée à  ton ViewController parent, à  qui tu veut renvoyer l'info ?
  • mushumushu Membre
    avril 2011 modifié #17
    le code est bien appelé car ma vue est bien popée

    MODIF: mais mon delegate est null...  >:(
  • AliGatorAliGator Membre, Modérateur
    00:38 modifié #18
    Ok donc c'est forcément ton "delegate" qui est nil (regarde en mettant un NSLog ou en plaçant un breakpoint et en regardant dans le deboggueur la valeur de cette variable, pour t'en convaincre).
    Tu as dû oublier d'affecter la propriété "delegate" avant de pusher ton ViewController.
  • mushumushu Membre
    00:38 modifié #19
    yep, delegate affecté
    ça fonctionne du feu de Dieu  <3 <br />
    Merci beaucoup
  • Paul_pPaul_p Membre
    00:38 modifié #20
    Salut,
    il y a un truc qui m'échappe dans le début du code, pour chercher chaque object et prendre leur 1ère lettre : quand remplit-on key, et que met-on comme string, comme argument de la fonction?

    - (void) setupElementDictionaryWithKey:(NSString*)key {
    


    NSString *title = [[element valueForKey:key] substringToIndex:1];
    


    je comprends qu'on cherche chaque objet du tableau, puis qu'on extrait seulement sa 1ère lettre, mais je me demande ce que représente "key" dans l'argument de la fonction

    Merci
  • CéroceCéroce Membre, Modérateur
    00:38 modifié #21
    C'est moi ou tu t'es trompé de sujet ?
  • Paul_pPaul_p Membre
    00:38 modifié #22
    désolé  :D
Connectez-vous ou Inscrivez-vous pour répondre.