Problème d'appel de méthodes

AdauAdau Membre
04:24 modifié dans API AppKit #1
Bonsoir,

Je me met à  créer mes propres programmes maintenant.
En tant que bon novice, je commence avec des choses simples, mais qui évidemment ne marche pas.
Mon programme a beaucoup de NSTextField dont les valeurs servent à  faire des calculs.
J'ai trois onglets, dont j'aimerai 3 objets de récupération de données et de calcul, un par onglet. L'affichage des resultats est commun aux onglets, et se fait via un 4ème objet, mon AppController.

Mon 4ème objet possède dont les 3 objets et appel les resultats des calculs. Mais impossible de lancer les méthodes.

Pour mieux comprendre, voici un programme super simple bouton/texte, mais avec deux controlleurs.

La commande [unObjet affichage] ne marche pas du tout.

Quel est le problème ?

Réponses

  • AdauAdau Membre
    04:24 modifié #2
    Première piste :
    Rien ne dit que l'objet glissé dans le mainmenu.nib est l'objet appartenu par l'objet controlleur maitre.

    Ceci veut dire qu'il ne peut n'y avoir qu'un seul objet qui interagit avec l'utilisateur ?
  • RocouRocou Membre
    04:24 modifié #3
    dans 1241557141:


    Pour mieux comprendre, voici un programme super simple bouton/texte, mais avec deux controlleurs.


    Il manque le fichier xib.
  • NoNo Membre
    04:24 modifié #4
    1. Rocou a raison, sans le fichier .nib/.xib, c'est difficile de voir les prioblèmes de liaison.

    2. je pense qu'il y a beaucoup de boulot sur la compréhension du fonctionnement d'une appli sous cocoa.

    Le peu qu'on peut déduire des quelques fichiers fournis :

    Classe AAController : tu déclares une variable unObjet de classe AAObjet. Mais à  aucun moment tu n'initialises cette variable unObjet.
    On pourrait supposer qu'il s'agit d'un outlet (encore qu'il manque le mot clé IBOutlet pour en être sûr), mais dans ce cas :
    -> AAController doit être instancié dans le nib/xib,
    -> AAObjet doit être instancié dans le nib/xib,
    -> une liaison outlet entre ces 2 instances doit être "tirée" dans le nib/xib,
    -> une liaison action entre l'instance AAController et le bouton (?) doit être "tirée" dans le nib/xib.

    Classe AAObjet : ici aussi, on ne sait pas si une vrai instance de cette classe existe.
    Donc, comme précédemment :
    -> AAObjet doit être instancié dans le nib/xib,
    -> une liaison outlet entre cette instance et le champ NSTextField doit être "tirée" dans le nib/xib afin de "nourrir" l'outlet textField.

    Si toutes ces simples conditions sont réunies, cela fonctionnera.
  • AdauAdau Membre
    04:24 modifié #5
    Merci beaucoup de ton aide. Tu as dis une phrase magique :
    une liaison outlet entre ces 2 instances doit être "tirée" dans le nib/xib,

    J'ai mis un IBOutlet devant le AAObjet dans AAControlleur, puis j'ai lié cette outlet à  Objet dans le fichier nib.

    Tout marche nickel maintenant.

    En pièce-jointe, l'application telle que j'aurai du vous la donner. Et ci-dessus ma correction qui marche.

    Merci beaucoup
  • psychoh13psychoh13 Mothership Developer Membre
    04:24 modifié #6
    Ton problème est simple: la variable d'instance "unObjet" n'est jamais initialisée... Ce qu'il fait que par défaut elle est à  "nil", et quand tu envoies un message à  "nil", celui-ci tombe en désuétude sans faire quoique ce soit.

    Alors, pour correctement initialiser une variable d'instance, en l'occurrence tu n'as que deux solutions, la première, la plus simple, c'est de créer une nouvelle instance avec alloc+init dans la méthode -init de ton contrôleur... Le problème ici c'est que ça ne fera pas ce que tu veux.

    La seule technique valable ici, c'est la deuxième, il suffit de mettre "IBOultet" devant la variable d'instance comme ton NSTextField dans l'autre classe, et de faire le lien dans IB...
    C'est pas parce que ce n'est pas un object graphique que tu ne peux pas le lier dans IB. Pour fonctionner, il faut que l'instance (le cube bleu) de ta classe AAObjet soit référencé par ton instance AAController.
Connectez-vous ou Inscrivez-vous pour répondre.