Affectation de variables globales à partir d'un contrôle

Pascal Délisle

Membre junior
20 Février 2003
39
0
Visiter le site
Bonjour,

Je viens tout juste de m'initier au développement d'applications avec Cocoa. Dans le passé, j'ai écrit plusieurs programmes en C et C++ orienté objet. Je suis donc en train d'apprendre l'Objective-C et le fonctionnement de Cocoa. Voilà donc que je décide de tester un truc relativement à l'application que je désire développement quand je serai plus féru. Dans ma fenêtre principale, je possède un contrôleur de type bouton radio avec trois options possibles (mutuellement exclusives, évidemment). L'usager peut choisir l'option 1, 2 ou 3. En sélectionnant l'une des trois options, je désire que le contrôle (bouton) envoie automatiquement un message à mon application principale de sorte qu'elle change une variable dans mon main(). Comment est-ce que je peux y arriver? Pourriez-vous citer la syntaxe exacte? Merci à l'avance.

Pascal
 

la tortue

Membre confirmé
6 Novembre 2003
397
1
Tu peux créer un objet MonControle héritant de NSObject par exemple avec une méthode appelée quand tes radios sont cliqués.
Par exemple:
<font class="small">Code:</font><hr /><pre>
@interface MonControle : NSObject
{
IBOutlet id radios;
}
- (IBAction)clic:(id)sender;
@end
</pre><hr />
Dans Interface Builder, tu connecte ton controle sur l'outlet 'radios' et le (target/action) sur -[MonControle clic
. Pour cela tu dois faire "lire" ton fichier '.h' par IB et créer une instance de ta classe.

Une autre solution est de créer une sous-classe de NSObject directement dans IB (Subclass NSObject) d'ajouter les outlets et les actions dans la fenêtre d'infos sur ta classe, puis de faire générer les fichiers '.h' et '.m' correspondants par IB.
 

Pascal Délisle

Membre junior
20 Février 2003
39
0
Visiter le site
Merci La Tortue pour ces explications. Je réussis à me créer une classe dérivée de NSObject et à instancier cette classe dans IB. Je réussis à générer les fichiers .h et .m de cette classe. Je connecte aussi le contrôle radio à MonContrôle. Le problème, c'est que lorsque la fonction "clic" de MonContrôle est appelée, elle n'arrive pas à accéder à la variable globale de mon programme principal. Supposons que cette variable est déclarée comme étant "int typeTest = 1;" dans mon programme principal, comment est-ce que je fais pour modifier cette variable à partir de ma fonction "clic"? Dois-je également connecter l'outlet "radio" de MonContrôle quelque part? Voyez-vous, je reçois un avertissement dans IB. On me dit que l'outlet "radio" n'est pas connecté. De plus, y aurait-il une façon conviviale de m'assurer que cette variable est bien modifiée autre que le débogueur? Un genre de "printf("%i", typeTest)?

Merci encore.


Pascal
 

plumber

Membre confirmé
15 Janvier 2003
473
0
ok c'est un peu dure de suivre comme ca MAIS apparement tu as loupé quelques choses tu as fait une class derivé de ton nsobject

mynes2 elle doit apparaitre dans t'as liste d'objet sous l'interface builder

enfin c'est dure se serait si simple de de montrer

enfin tu as tu manqué une étapes je crois qu'il existe un tutaux bien foutu avec des screenshots je cherche

pour la sortie de debug tu peux utiliser NSlog
 

Pascal Délisle

Membre junior
20 Février 2003
39
0
Visiter le site
Ma question n'était peut-être pas formulée clairement. En gros, voici ce que je désire faire. Lorsqu'un usager clique sur un bouton donné, une variable quelconque de mon programme "main()" est mise à jour.

Autre chose. Similairement, quand l'usager clique sur un autre bouton, j'aimerais pouvoir appeler une fonction située dans mon fichier main.m.

Comment dois-je procéder exactement?
 

la tortue

Membre confirmé
6 Novembre 2003
397
1
Pour que tes variables (et fonctions) situées dans 'main.m' soit accessible ailleurs, il faut que tu définisses un fichier header (par exemple 'global.h') contenant les déclarations de ces variables.
Par exemple:
<font class="small">Code:</font><hr /><pre>// global.h
extern int ma_variable;
extern void ma_fonction();
</pre><hr />
Ensuite tu inclus ce fichier (#include "global.h") dans 'main.m' et dans les autres fichiers '.m' où c'est nécessaire...
 

plumber

Membre confirmé
15 Janvier 2003
473
0
ok c'est ca que tu voulais j'avais pas compris du tout

merci pour la Tortue moins rapide qu'un Renard mais plus juste
qu'un Aigle dans sa réponse