IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Objective-C Discussion :

dealloc + tableview [Objective-C]


Sujet :

Objective-C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut dealloc + tableview
    @edit: voir plus bas.

  2. #2
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par pianopariss Voir le message
    Mais cela plante lamentablement...

    si le selector n'est pas reconnu, il n'y a pas 36 raisons possibles :
    en dehors de la faute de frappe dans le sélecteur, c'est que l'objet n'est pas de la classe que vous pensez…

    auriez-vous oublié de déclarer sa super-classe dans le @interface ?

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    auriez-vous oublié de déclarer sa super-classe dans le @interface ?
    Merci pour cette réponse rapide !
    C'est tout à fait possible, pourriez-vous détailler "déclarer sa super-classe" ?
    J'ai encore un peu de mal avec l'ObjC...

  4. #4
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par pianopariss Voir le message
    Merci pour cette réponse rapide !
    C'est tout à fait possible, pourriez-vous détailler "déclarer sa super-classe" ?
    J'ai encore un peu de mal avec l'ObjC...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @interface Class : SuperClasse [<protocol, …>] {
    }
    si vous faites seulement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    @interface Class {
    }
    la classe a pour super-classe NSObject… qui lui ne répond pas à "initWithNibName:bundle:" …

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Non ça ne semble pas être cela, j'ai déclaré les classes comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @interface RssDescViewController : UIView {
        // ...
    }

  6. #6
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par pianopariss Voir le message
    Non ça ne semble pas être cela, j'ai déclaré les classes comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @interface RssDescViewController : UIView {
        // ...
    }
    appeler une class xxxxController quand elle descend de UIView n'est pas pour aider à la lisibilité du code…

    on s'attend plutôt à ce que ce soit un UIViewController …
    et c'est probablement çà votre "bug"…

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Merci, je viens effectivement de me rendre compte que toutes mes "Sous-TabBar" sont descendantes de UIView alors qu'elles devraient l'être de UIViewController.

    Cependant je suis incapable de les faire fonctionner si je les fais hériter de UIViewController, j'ai beau tout essayer dans Interface Builder, mon application plante au lancement.

    Voilà un aperçu du nib de ma 2e vue qui fonctionne si je le fais hériter dans le .h de... UIView mais pas de UIViewController:

    @edit:.

  8. #8
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    c'est impossible de deviner à distance quelle "couac" vous avez bien pu faire dans la définition de vos objets dans IB…

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Je m'en doute, mais si je comprends bien toutes mes vues doivent hériter de UIViewController et non pas de UIView ?

    Ou bien seulement la vue principale ? (qui contient la TabBar) et qui hérite déjà de UIViewController.

    Merci

  10. #10
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par pianopariss Voir le message
    Je m'en doute, mais si je comprends bien toutes mes vues doivent hériter de UIViewController et non pas de UIView ?

    Ou bien seulement la vue principale ? (qui contient la TabBar) et qui hérite déjà de UIViewController.

    Merci
    NON !

    Vos Controller de View (RssDescViewController par exemple) doivent descendre de UIViewController et les vues de UIView…

    (et donc une même classe ne peut donc pas remplir les 2 rôles à la fois… et je commence à soupçonner que ce serait peut-être bien çà votre "couac"…)

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Merci pour votre réponse !

    Donc pour chaque onglet (=nib) utilisé par le TabBar j'ai besoin d'une UIView et d'un UIViewController ?

    Pour le moment, pour chaque nib, je déclare le File's Owner dans IB comme UIViewController et le UIView (dans IB) comme le nom de la classe (par exemple RssDescViewController, le nom est effectivement mal choisi), ensuite je relie le "view"du UIView au File's Owner (UIViewController).

    Dans les .h je déclare le nom de la classe (RssDescViewController par exemple) comme descendant de UIView et c'est tout.

    J'ai donc dans mon code accès uniquement aux UIView, pas au contrôleurs.
    Ce qui ne fonctionne pas avec le initWithNibName qui lui demande l'accès au contrôleur par exemple.

    Alors comment dois-je faire ?

    Désolé si j'ai du mal à comprendre, mais j'avoue être un peu perdu.

  12. #12
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Mettez de l'ordre dans le nom de vos classes…

    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    RssDescViewController *dvController = [[RssDescViewController alloc] initWithNibName
                                               :@"RssDescViewController" bundle:[NSBundle mainBundle]];
    doit devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    UIViewController *dvController = [[UIViewController alloc] initWithNibName
                                               :@"RssDescViewController" bundle:[NSBundle mainBundle]];
    si vous n'avez pas de sous-classe de UIViewController
    ET
    si "RssDescViewController" est bien le nom du fichier .xib qui contient le tout…

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    @edit.

  14. #14
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par pianopariss Voir le message
    Merci beaucoup !

    Donc j'enlève le "Controller" dans le nom de mes classes.
    Mais je les laisse descendre de UIView.

    J'ai remplacé le code par celui que vous m'avez fourni, qui fonctionne correctement, cependant pas la ligne d'en dessous...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath
                     :(NSIndexPath *)indexPath {
        UIViewController *dvController = [[UIViewController alloc] initWithNibName
                                          :@"RssDescView" bundle:[NSBundle mainBundle]];
        // RssView may not respond to -navigationController
        [[self navigationController] pushViewController:dvController animated:YES];
        [dvController release];
        dvController = nil;
    }
    qui implémente navigationController ?
    visiblement pas la classe dont "self" est une instance…

    Citation Envoyé par pianopariss Voir le message
    P.S. Dois-je faire hériter ma vue principale de UIView aussi ou bien du contrôleur ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @interface FirstView : UIView {
        IBOutlet UITableView *tableview;
    }
    j'ai déjà répondu à çà plus haut…

    mais visiblement vous ne captez pas du tout le concept MVC…
    les vues ont rarement besoin d'avoir des "outlet" sur d'autres vues…
    ce qui semblent indiquer que non seulement vous mélangez les noms des hiérarchies de classes mais aussi les rôles de chacune des hiérarchies…

    (charger un "controller" à partir d'un "nib" à chaque sélection n'est pas la bonne direction pour avoir une application "snappy"…)

    Est-ce que vous avez regardé les exemples du site d'Apple ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    @edit.

  16. #16
    Expert confirmé
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 937
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 937
    Points : 4 358
    Points
    4 358
    Par défaut
    Citation Envoyé par pianopariss Voir le message
    Je vois dans tous les codes sur le net que toutes les vues descendent de UIViewController
    JAMAIS !

    les vues descendent de UIView…
    les contrôleurs (de vues…) de UIViewController…

    puisque vous avez besoin d'un TableView :

    http://developer.apple.com/iphone/li...ion/Intro.html

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    76
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2006
    Messages : 76
    Points : 52
    Points
    52
    Par défaut
    Ok ok, j'ai tout repris depuis le début, recommencé tout le projet et tout va nettement mieux !

    Merci pour votre aide.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Selection d'un TableViewer
    Par TabrisLeFol dans le forum SWT/JFace
    Réponses: 6
    Dernier message: 16/09/2013, 20h35
  2. [RCP] Remplir un TableViewer d'une Vue depuis une Action
    Par DarkHope dans le forum Eclipse Platform
    Réponses: 16
    Dernier message: 26/06/2006, 15h06
  3. Question Table /TableViewer
    Par Schtroumpf81 dans le forum SWT/JFace
    Réponses: 2
    Dernier message: 14/06/2006, 23h47
  4. outil permettant de tracker les alloc/dealloc memoire
    Par bob8181_2000 dans le forum C++Builder
    Réponses: 2
    Dernier message: 03/09/2005, 19h57
  5. Réponses: 13
    Dernier message: 20/01/2005, 12h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo