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

Apple Discussion :

Accès à un attribut d'AppController depuis une autre classe [Cocoa]


Sujet :

Apple

  1. #1
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Accès à un attribut d'AppController depuis une autre classe
    Bonsoir,

    J'ai une application cocoa avec une classe AppController (qui gère les boutons, awakeFromNib, enfin une AppController classique). Il y a un outlet vers un NSArrayController de mon nib dans cette classe, et des déclarations @property/synthesize pour cet outlet.

    Il y a une autre classe, sous-classe de NSViewController (mais cela ne change rien) qui est elle aussi instanciée dans mon nib. Comment pourrais-je accéder à l'outlet de AppController depuis cette sous-classe de NSViewController ?

    C'est à dire, comment obtenir un pointeur sur l'instance de AppController ?
    Depuis ma NSViewController subclass, j'aimerais avoir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    foo = [instanceDeAppController monArrayContoller];
    mais je ne sais comment obtenir le pointeur instanceDeAppController. Il doit y avoir un moyen d'accéder aux attributs de mon AppController sans passer pas une variable globale !

    Si vous pouvez m'aidez,
    J'espère avoir été clair.
    Valleix007

  2. #2
    Membre expérimenté Avatar de Ceylo
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2007
    Messages
    1 216
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 216
    Points : 1 312
    Points
    1 312
    Par défaut
    Créé un outlet dans ton NSViewController qui désigne ton AppController.. ?

  3. #3
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par Spootnik Voir le message
    Créé un outlet dans ton NSViewController qui désigne ton AppController.. ?
    Absolument, il me faudrait cet outlet dans mon sousClasseNSViewContoller.m.

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 934
    Points : 4 347
    Points
    4 347
    Par défaut
    Citation Envoyé par valleix007 Voir le message
    Absolument, il me faudrait cet outlet dans mon sousClasseNSViewContoller.m.
    soit vous le créez dans Interface Builder, c'est assez simple… et c'est la méthode habituelle pour référencer un objet lié à partir d'un autre dans l'UI…

    soit vous utilisez le fait que normalement l'application controller est aussi son delegate… et donc [NSApp delegate] partout dans votre code renverra celui-ci…
    (NSApp étant une globale…)

  5. #5
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je pense que je vais pour l'instant utiliser NSApp delegate, merci beaucoup.

    Pour ce qui est d'IB, le problème est que ma sous classe de NSViewController possède son propre nib (appelons le Snib) et que je n'arrive pas a accéder depuis ce Snib à l'arrayController de mon nib principal (appelons le Mnib)...

    Je voudrais avoir accès depuis Snib à l'arrayController de mon Mnib. Est-ce possible depuis IB ou dois-je forcement utiliser NSApp delegate pour récupérer un pointeur de mon arrayController et coder les bindings à la main...

    Est il possible d'indiquer à un NSArrayController dans IB qu'il n'est pas une nouvelle instance de NSArrayController main qu'il doit être un arrayController définit ailleurs (ici donc dans AppController) ?

    Merci pour vos réponses !

    [EDIT 1]
    Je viens de tester avec [NSApp delegate], sa marche tout à fais bien, liaisons faites à la main... Si vous savez comment faire depuis IB je suis preneur. Pour ceux qui veulent savoir comment faire, voici un peu de mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    subViewArrayController = [[NSApp delegate] appControllerArrayController];
    [[[tableView tableColumns] objectAtIndex:unIndex]
                                        bind:@"value"
                                        toObject:subViewArrayController
                                        withKeyPath:@"arrangedObjects.unElementDuController"
                                        options:nil];

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 934
    Points : 4 347
    Points
    4 347
    Par défaut
    Si vous en arrivez à devoir faire ce genre de spaghetti c'est qu'il y a un problème de design de l'architecture de l'application…

    Un Nib est une sorte de template qui doit être le plus auto-suffisant possible… si vous ne voulez pas rentrer en conflit avec les concepts OO et MVC qui sont au cœur de Cocoa…

    Si vous devez propager une source de données unique dans différents Nib, ce n'est pas l'ArrayController lui-même qu'il faut propager mais l'objet dont il tire son contenu…
    et cela sera fera par l'injection de celui-ci par le code qui charge le Nib secondaire…

    dans le code principal :
    on charge le Nib secondaire
    on obtient le controller du Nib
    on passe la source de données au controller du Nib (le ManagedObjectContext ou l'Array …) via un setter
    (le champ sera un IBOutlet dans le controller…)

    dans Interface builder
    un object ArrayController est défini dans le Nib secondaire dont la source d'information (le ManagedObjectContext ou l'Array…) est obtenue du controller du Nib via le champ dont la valeur a été injectée par le code (et on y a accès dans IB car c'est un IBOutlet…)

    Chaque Nib aura son ArrayController propre qui obtient/négocie ses informations de la même source…
    et non un seul ArrayController pour tous les Nibs… solution qui ne peut qu'amener des problèmes…

  7. #7
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    Chaque Nib aura son ArrayController propre qui obtient/négocie ses informations de la même source…
    et non un seul ArrayController pour tous les Nibs… solution qui ne peut qu'amener des problèmes…
    Mon idée (qui est maintenant codée et fonctionnelle) est de proposer 2 view pour un même tableau, comme iTunes le fait : une view NSTableView et une autre NSCollectionView qui se remplace l'une l'autre dans un NSBox (comme le propose Aaron Hillgass dans son livre). Un seul contrôleur permet d'économiser de la mémoire et évite d'hypothétiques conflits entre des NSArrayController qui se disputeraient un unique tableau (suppositions de novice...).

    Voilà à quoi cela ressemble maintenant :

    iLibrary Version pre-pre-pre-alpha 0.0.0.1


    Si vous avez une meilleure architecture, n'hésitez pas.

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

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 934
    Points : 4 347
    Points
    4 347
    Par défaut
    Citation Envoyé par valleix007 Voir le message
    Mon idée (qui est maintenant codée et fonctionnelle) est de proposer 2 view pour un même tableau, comme iTunes le fait : une view NSTableView et une autre NSCollectionView qui se remplace l'une l'autre dans un NSBox (comme le propose Aaron Hillgass dans son livre). Un seul contrôleur permet d'économiser de la mémoire et évite d'hypothétiques conflits entre des NSArrayController qui se disputeraient un unique tableau (suppositions de novice...).

    Voilà à quoi cela ressemble maintenant :

    iLibrary Version pre-pre-pre-alpha 0.0.0.1


    Si vous avez une meilleure architecture, n'hésitez pas.
    dans ce cas d'utilisation, ce n'était pas nécessaire de faire des Nibs séparés pour les vues…
    des Nibs séparés c'est intéressant quand il y a réutilisation plusieurs fois du même objet dans des contextes différents (de la même application…)…

  9. #9
    Candidat au Club
    Inscrit en
    Août 2010
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Citation Envoyé par JeitEmgie Voir le message
    dans ce cas d'utilisation, ce n'était pas nécessaire de faire des Nibs séparés pour les vues…
    des Nibs séparés c'est intéressant quand il y a réutilisation plusieurs fois du même objet dans des contextes différents (de la même application…)…
    Effectivement, c'est évident maintenant que j'y pense... Enfin j'aurais au moins appris quelque chose ! Je vais de ce pas changer cette application.

    Les Shadoks ont dit : pourquoi faire simple quand on peu faire compliquer ?
    Merci beaucoup.

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

Discussions similaires

  1. Acces à un ArrayList ou List depuis une autre classe.
    Par recluster dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 29/12/2009, 19h45
  2. Réponses: 5
    Dernier message: 18/09/2008, 18h20
  3. JProgressbar qui avance depuis une autre classe....
    Par Baptiste Wicht dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 02/02/2006, 21h04
  4. [Débutant] Lancer procédure depuis une autre classe
    Par pugnator dans le forum Langage
    Réponses: 5
    Dernier message: 31/10/2005, 15h50
  5. Acces a un control depuis une autre classe
    Par schnito dans le forum MFC
    Réponses: 5
    Dernier message: 25/01/2004, 23h14

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