UITableView: probleme de connexion

yafouyafou Membre
11:41 modifié dans API UIKit #1
Bonjour à  tous,

J'ai regardé ce qu'il y a sur le forum, mon pb tj pas résolut.

J'ai ajouté une UITableView à  ma View (UIView)
J'ai ajouté les deux protocoles et fait la connexion de la tableView avec les 2 propriété (Datasource et Delegate)
et finalement crée une outlet tableView que j'ai connecté à  ma UITableView.

Sauf que les évenement ne se déclence pas !

Seulement ça se déclenche :
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section

mais celui là  ne marche pas
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section.

n'hesitez pas à  répondre
Je vous remercie ++

Réponses

  • CeetixCeetix Membre
    11:41 modifié #2
    J'ai du mal à  comprendre la fin de ton message.
    Tu n'arrives pas à  quoi?
    Quel messages t'affiche la console ou le compilateur (si erreurs il y a).
  • yafouyafou Membre
    11:41 modifié #3
    Pas de message d'erreur.
    L'evenement ne se déclenche pas et parsuite ma tableView est tj vide.
    J'ai mis à  point d'arret et comme ça j'ai sut que l'evenement ne fonctionne pas:
    cellForRowAtIndexPath. (comme indiqué en haut)

    Voilà  mon ami.
  • MalaMala Membre, Modérateur
    11:41 modifié #4
    dans 1236077094:

    n'hesitez pas à  répondre

    En étant un peu plus clair ça aiderait sans doute.

    Si tu n'es pas capable d'expliquer clairement ton problème, le mieux c'est de mettre à  dispo ton projet en fichier joint.

    PS: merci de faire un minimum d'effort de relecture pour l'orthographe... ;)
  • CeetixCeetix Membre
    11:41 modifié #5
    D'accord avec Mala, envois ton projet parce que là  ...
  • yafouyafou Membre
    11:41 modifié #6
    Woula,
    Vous avez parfaitement raison, mais bon je ne suis pas français, donc l'orthographe ça ne va pas être nickel.
    Bref, je vous explique le truc clairement :
    Je n'arrive pas à  faire fonctionner la tableView : elle est tj vide sans message d'erreur.
    Je suppose que l'événement cellForRowAtIndexPath ne fonctionne pas. (j'ai mis un point d'arrêt pour voir que ça marche pas).
    Voilà  en tous.
    En ce qui concerne le projet, j'explique (mieux de l'envoyer) :
    J'ai ajouté à  ma View une UITableView, crée une outels tableView et fait la connexion.
    J'ai déclaré les protocoles et implémenté les événements.


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath => ne se déclenche pas.

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  => Fonctionne

    voilà ,
  • CeetixCeetix Membre
    11:41 modifié #7
    Il faudrait peut-être le remplir ton tableView non ?
  • yafouyafou Membre
    11:41 modifié #8
    dans 1236079176:

    Il faudrait peut-être le remplir ton tableView non ?



    Ben comment le remplir, j'ai cru que ça se fait avec l'événement : cellForRowAtIndexPath qui ne marche pas ?
  • CeetixCeetix Membre
    11:41 modifié #9
    Moi je remplis un tableau et après chaque case de mon tableau devient une ligne.
    Va voir mon tuto sur le Tableview : iPhonetuts.
    Il n'est pas parfait mais t'aidera à  comprendre le principe d'un tableView.
  • MalaMala Membre, Modérateur
    mars 2009 modifié #10
    dans 1236079000:

    Woula,
    Vous avez parfaitement raison, mais bon je ne suis pas français, donc l'orthographe ça ne va pas être nickel.

    Pas de souci. C'est déjà  beaucoup mieux.

    dans 1236079000:

    Bref, je vous explique le truc clairement :
    Je n'arrive pas à  faire fonctionner la tableView : elle est tj vide sans message d'erreur.
    Je suppose que l'événement cellForRowAtIndexPath ne fonctionne pas. (j'ai mis un point d'arrêt pour voir que ça marche pas).
    Voilà  en tous.
    En ce qui concerne le projet, j'explique (mieux de l'envoyer) :
    J'ai ajouté à  ma View une UITableView, crée une outels tableView et fait la connexion.
    J'ai déclaré les protocoles et implémenté les événements.


    - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath => ne se déclenche pas.

    - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section  => Fonctionne

    voilà ,


    Bien, sans le code cela va rester de la spéculation mais bon on va essayer.

    Si numberOfRowsInSection fonctionne cela laisse supposer que tes connections sont Ok. Mais qu'est-ce que retourne la méthode? Si c'est le nombre de valeurs d'un NSArray vide, on retourne 0 et du coup aucune raison que cellForRowAtIndexPath soit appelée.

    Donc avant d'aller plus loin, il faut savoir ce que tu retournes dans numberOfRowsInSection. Un point d'arrêt ou un petit NSLog fera l'affaire...
    <br />NSLog(@&quot;&gt;%d&quot;,[leTableauDeMaSection count]);<br />
    


  • CeetixCeetix Membre
    11:41 modifié #11
    Le truc c'est que je ne pense pas qu'il ai remplis de tableau.
  • MalaMala Membre, Modérateur
    11:41 modifié #12
    dans 1236084555:

    Le truc c'est que je ne pense pas qu'il ai remplis de tableau.

    Le NSLog devrait nous le dire.
  • yafouyafou Membre
    11:41 modifié #13
    Tout à  fait.
    Il y a un problème avec mon tableau. Malgré que je l'ai remplit, il est tj vide.
    J'ai mis un return 1 (dans NumberOfRows InSection) et donc les événements se sont déclenchés.

    Merci Mala, merci ceetix
  • MalaMala Membre, Modérateur
    11:41 modifié #14
    dans 1236087739:

    Tout à  fait.
    Il y a un problème avec mon tableau. Malgré que je l'ai remplit, il est tj vide.
    J'ai mis un return 1 (dans NumberOfRows InSection) et donc les événements se sont déclenchés.

    Merci Mala, merci ceetix

    Je pense que c'est tout simplement parce que ton tableau n'est pas alloué. Du coups, tu fais des "addObject:" ou équivalent sur un pointeur à  nil. ;)
  • yafouyafou Membre
    mars 2009 modifié #15
    Exacte.
    J'ai fait un alloc suivit d'un init. C'est bon.
    Comment je peux déboguer la variable comme on le fait en .Net ou Delphi.
    Pour le moment j'ai des variables en binaires qui apparait.

    bizarre avec ce TableView malgré que ça l'aire simple.
    Ma dataSource est un NSArray.
    Qu'elle est le meilleur événement, le plus simple pour afficher les infos dans la table ?
  • MalaMala Membre, Modérateur
    mars 2009 modifié #16
    dans 1236089431:

    Exacte.
    J'ai fait un alloc suivit d'un init. C'est bon.
    Comment je peux déboguer la variable comme on le fait en .Net ou Delphi.
    Pour le moment j'ai des variables en binaires qui apparait.

    bizarre avec ce TableView malgré que ça l'aire simple.
    Ma dataSource est un NSArray.
    Qu'elle est le meilleur événement, le plus simple pour afficher les infos dans la table ?



    A ma connaissance, ce n'est pas géré au niveau de l'éditeur. C'est d'ailleurs un gros manque dans Xcode. Pour palier à  cela, tu peux passer directement par gdb. Ne pas avoir peur, ça fait pas mal. :fouf):

    Lorsque tu es dans le débogueur d'Xcode tu as une fenêtre gdb qui s'affiche avec un prompt "(gdb)" (C'est là  que le programme nous râle dessus en général quand il y a un problème lors de l'exécution  >:D ).

    Il suffit alors de taper la commande suivante:
    <br />po [0x138f40 description]<br />
    

    Avec 0x138f40 qui est dans mon exemple l'adresse de l'un de mes tableaux que j'ai copié/collé depuis la fenêtre de mes variables (les adresses dont tu parles). gdb va alors appeler la méthode "description" que possède tout objet héritant de NSObject et afficher le retour qui sera tout simplement un listing du contenu du tableau.

    Cela revient à  faire quasiment  la même chose que si on mettait quelque part dans le code
    <br />NSLog([monTableau description]);<br />
    

    Sauf qu'avec un NSLog les données sont en plus tracées dans le fichier de log mais pour du debug ce n'est pas vraiment utile.

    En espérant que l'astuce serve à  d'autre.  :)

    Edit: un simple "po 0x138f40" sans la commande description suffit.
  • AliGatorAliGator Membre, Modérateur
    11:41 modifié #17
    et pourquoi pas un "po monTableau" ? la commande print-object sait retrouver les noms des variables, du moment qu'on est dans le bon contexte (en ayant double-cliqué au bon endroit dans la call stack ce qui permet de visualiser ces variables alors dans la fenêtre de watch qui affiche le contenu des variables locales et leurs adresses.... mais donc de toute façon faut le faire si tu veux faire "po 0x12345678" au lieu de "po monTableau" alors ^^
  • MalaMala Membre, Modérateur
    11:41 modifié #18
    dans 1236120456:

    et pourquoi pas un "po monTableau" ? la commande print-object sait retrouver les noms des variables, du moment qu'on est dans le bon contexte (en ayant double-cliqué au bon endroit dans la call stack ce qui permet de visualiser ces variables alors dans la fenêtre de watch qui affiche le contenu des variables locales et leurs adresses.... mais donc de toute façon faut le faire si tu veux faire "po 0x12345678" au lieu de "po monTableau" alors ^^

    Tout a fait, du coup c'est quand même plus rapide de passer directement par l'adresse. Finalement, avoir le nom c'est pas forcément "User Frendly" sous gdb.  :P
Connectez-vous ou Inscrivez-vous pour répondre.