[Résolu] @property
saukeguy
Membre
Bonjour a tous me revoilà donc avec de nouvelles questions:)!
Donc voici mon souci et ne me dites pas que je ne me suis pas renseigné car je navigue de forum en forum afin de comprendre le problème.
Donc voila j'ai une interface test qui est une View et dans laquelle je possède un Outlet de typer Combobox. Ce combobox comporte des éléments qui sont directement chargé via IB.
Comme ceci :
J'essaye donc de récupérer le contenu sélectionné dans cette combobox autre part dans un autre fichier. Je réalise donc automatiquement un getter/setter grace au @property @ synthesize.
Jusque la tout va bien mon getter est bien reconnu dans mon autre fichier. Le seul souci est que je connais mon erreur mais je ne sait pas comment la résoudre.
Et enfin dans mon autre fichier je fait:
Afin de savoir si les pointeurs sur ma combobox sont les même. Le problème est que je ne pointe pas sur le même objet test.
sachant que juste avant j'affiche ma view dans ma window ce qui normalement à donc déja initialisé mes outlet:
Comment pourrait-je pointer sur le même objet afin de récupérer le contenu de ma combobox autre part. je sait que mon erreur vient du fait que je créer un test et que je ne manipule donc pas la même chose mais comment faire donc?
Est-ce une manipulation a faire via IB?
Merci encore de vos futurs réponses qui m'aident toujours /smile.png' class='bbc_emoticon' alt=':)' />.
Donc voici mon souci et ne me dites pas que je ne me suis pas renseigné car je navigue de forum en forum afin de comprendre le problème.
Donc voila j'ai une interface test qui est une View et dans laquelle je possède un Outlet de typer Combobox. Ce combobox comporte des éléments qui sont directement chargé via IB.
Comme ceci :
<br />
<br />
[color=#d62b24][color=#7a482f]#import [/color]<Cocoa/Cocoa.h>[/color]<br />
<br />
[color=#bf2e9d]@interface[/color] test : NSObject {<br />
[color=#bf2e9d]IBOutlet[/color] [color=#7340a3]NSView[/color] *view;<br />
[color=#bf2e9d]IBOutlet[/color] [color=#bf2e9d]id[/color] nb_mission;<br />
}<br />
<br />
[color=#bf2e9d]@property[color=#000000]([/color]assign[color=#000000]) [/color]id[color=#000000] _nb_mission;[/color][/color]<br />
<br />
- ([color=#bf2e9d]IBAction[/color])nb_mission:([color=#bf2e9d]id[/color])sender;<br />
<br />
[color=#bf2e9d]@end[/color]<br />
J'essaye donc de récupérer le contenu sélectionné dans cette combobox autre part dans un autre fichier. Je réalise donc automatiquement un getter/setter grace au @property @ synthesize.
<br />
<br />
[color=#7a482f]#import [color=#d62b24]"test.h"[/color][/color]<br />
[color=#bf2e9d]@implementation[color=#000000] test[/color][/color]<br />
[color=#bf2e9d]@synthesize[/color] _nb_mission = nb_mission;<br />
Jusque la tout va bien mon getter est bien reconnu dans mon autre fichier. Le seul souci est que je connais mon erreur mais je ne sait pas comment la résoudre.
Et enfin dans mon autre fichier je fait:
<br />
<br />
test *a = [[test [color=#3f217c]alloc[/color]][color=#3f217c]init[/color]];<br />
<br />
[color=#7340a3]NSAlert[/color]* msgBox = [[[[color=#7340a3]NSAlert[/color] [color=#3f217c]alloc[/color]] [color=#3f217c]init[/color]] [color=#3f217c]autorelease[/color]];<br />
[msgBox [color=#3f217c]setMessageText[/color]: [[color=#7340a3]NSString[/color] [color=#3f217c]stringWithFormat[/color]:[color=#d62b24]@"%@"[/color],a._nb_mission]];<br />
[color=#3f217c][color=#000000][msgBox [/color]addButtonWithTitle[color=#000000]: [/color][color=#d62b24]@"OK"[/color][color=#000000]];[/color][/color]<br />
[msgBox [color=#3f217c]runModal[/color]];<br />
Afin de savoir si les pointeurs sur ma combobox sont les même. Le problème est que je ne pointe pas sur le même objet test.
sachant que juste avant j'affiche ma view dans ma window ce qui normalement à donc déja initialisé mes outlet:
<br />
<br />
[color=#7340a3]NSViewController[color=#000000] *viewController = [[[/color]NSViewController[color=#000000] [/color][color=#3f217c]alloc[/color][color=#000000]] [/color][color=#3f217c]initWithNibName[/color][color=#000000]:[/color][color=#d62b24]@"test"[/color][color=#000000] [/color][color=#3f217c]bundle[/color][color=#000000]:[/color][color=#bf2e9d]nil[/color][color=#000000]];[/color][/color]<br />
<br />
[view_mission_1 [color=#3f217c]addSubview[/color]:[viewController [color=#3f217c]view[/color]]];<br />
Comment pourrait-je pointer sur le même objet afin de récupérer le contenu de ma combobox autre part. je sait que mon erreur vient du fait que je créer un test et que je ne manipule donc pas la même chose mais comment faire donc?
Est-ce une manipulation a faire via IB?
Merci encore de vos futurs réponses qui m'aident toujours /smile.png' class='bbc_emoticon' alt=':)' />.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
2) Qu'est ce qu'est sensé être _nb_mission ?
Là , tu l'as mis en type id.
id est un type du langage Objective-C et qui représente un objet générique. Ce n'est pas un entier.
Quand un nib est chargé, les objets qui sont dedans sont instanciés. Ensuite, les outlets, qui sont des pointeurs sur des objets, sont fixées pour correspondre à ces objets.
Il nous faudrait savoir ce que tu as mis dans le xib.
Voici ce que comporte mon xib qui comporte ma view. Une simple NSCombobox qui est relié à mon fichier via IB.
Je réitère ma question. En enlevant
Puis je accéder a ma variable nb_mission qui est une Combobox dans le fichier ou ma view est apellé en faisant par exemple [viewController view.nb_mission].
Ceci n'est qu'un exemple ne prenez pas la mouche /smile.png' class='bbc_emoticon' alt=':)' />.
Non, tu ne peux pas, parce que viewController est un NSViewController et sa propriété view est de type NSView*, pas Test.
Typiquement, ce qu'on ferait:
Ensuite, pour charger le XIB:
De toute façon, c'est aux contrôleurs de faire le lien entre les vues et les modèles, pas aux modèles d'aller lire la combo box, il te faut donc un contrôleur. (architecture MVC).
En effet, je doit absolument réaliser un contrôle sur cette outlet. Ce que je ne comprend pas c'est que le getter n'est pas accessible dans le fichier exterieur et que pour y accéder je doit obligatoirement créer une instance de cette classe qui obligatoirement remettra les IBOutlet a nil . Je ne peut pas instancier cette classe autrement pour lui dire qu'il doit se connecté au controlleur qui a chargé le xib?
Pour ton problème, pourquoi ne prendrais tu pas un projet vierge fournis par Xcode, tu met une combobox dans ta fenêtre et tu utilise l'assistant pour ajouter et déclarer correctement des IBOutlet ? Au moins tu verra quel est la bonne méthode et tu pourra la reproduire...
sont vraiment étonnantes!!
@property et @synthesize remplacent les méthodes set et get de Java par exemple. Donc
lors de la méthode "init" de ta classe.
Comme dit plus haut, "id" ne renseigne sur rien... Ce n'est ni un type C ni une classe. Que veux-tu instancier? Cela produira des erreurs de mémoire nécessairement.
Le bouquin "Cocoa sous Mac OSX" de Hillegass est vraiment très bien pour apprendre les bases...
En l'état, tu ne comprends pas comment fonctionne l'instanciation des objets dans le nib, comment on charge un nib et ce qu'est le File's Owner. Le livre t'expliquera les concepts petit à petit.