initialiser un NSWindowController en passant des arguments

digitalfab

Membre enregistré
29 Avril 2011
9
0
Bonjour à tous,

Je cherche depuis quelques jours comment initialiser l'appel d'un NSWindowController de la manière suivante:

-(id) initWithData1:myData1 Data2:myData2
{
self = [super initWithWindowNibName:@"OpenDocument"];
if (self) {
[self setMonTextField1: Data1];
[self setMonTextField2: Data2];
}
return self;
}

quand je fais ça, rien à faire, Data1 et Data2 ne s'affiche jamais dans le xib:mouais:
Par contre, si je mets une valeur en dur, type [self setMontTextField1:@"toto"], j'ai bien "toto" dans le champs de mon xib....

merci pour vos réponses!
 
Pour commencer, j'espère que ton code ressemble plutôt à cela :
Bloc de code:
-(id) initWithData1:[B](NSString*)[/B]myData1 Data2:[B](NSString*)[/B]myData2
{
self = [super initWithWindowNibName:@"OpenDocument"];
if (self) {
[self setMonTextField1: [B]myData1[/B]];
[self setMonTextField2: [B]myData2[/B]];
}
return self;
}
:siffle:

Parce que si tu comptes utiliser ton code tel quel, je te conseille plutôt de retourner à tes études avant d'aller plus loin :D:D:D

Tu passes bien dans ton constructeur ?
Tes paramètres myData1 et myData2 sont bien initialisés ?
 
Par principe, ça ne peut pas fonctionner. Les outlets ne sont fixées que lorsque la fenêtre est chargée. Ce qui ne sera le cas que lorsque la méthode -window du NSViewController sera appelée, pas avant.

Conserve data1 et data2 en variables d'instance, et fixe les textfields dans -awakeFromNib.
 
bon ben faut que je précise sinon je vais passer pour une nouille!:rateau:
en fait, je cherche à passer dans l'initilisation de mon NSWindowController des paramètres.
Je redéfinie donc bien la méthode avec :

-(id) initWithData1:(NSString*)myData1 Data2:(NSString*)myData2
{
self = [super initWithWindowNibName:@"OpenDocument"];
if (self) {
[self setMonTextField1: myData1];
[self setMonTextField2: myData2];
}
return self;
}

dans la méthode d'appel, j'écris:

NSWindowController * myWindow = [[NSWindowController alloc]initWithData1:uneData1 Data2:uneData2];

[myWindow showWindow:self];

et là c'est le drame: champs de ma fenêtre vides.

Par contre si je garde l'init de base et que j'initialise dedans mes champs:
myData1 = @"toto";
j'ai bien l'affichage de toto dans ma fenêtre.

Petite précision je ne suis pas dans un projet type document mais simple.
A votre bon coeur!

---------- Nouveau message ajouté à 09h58 ---------- Le message précédent a été envoyé à 09h57 ----------

merci pour la précision!
et si je passais mes data par le panneau d'alerte? c'est propre?
c'est ce que je fais d'habitude mais j'ai un doute...

---------- Nouveau message ajouté à 10h02 ---------- Le message précédent a été envoyé à 09h58 ----------

@Céroce

merci pour la précision!
et si je passais mes data par le panneau d'alerte? c'est propre?
c'est ce que je fais d'habitude mais j'ai un doute...
 
Par principe, ça ne peut pas fonctionner. Les outlets ne sont fixées que lorsque la fenêtre est chargée. Ce qui ne sera le cas que lorsque la méthode -window du NSViewController sera appelée, pas avant.

Conserve data1 et data2 en variables d'instance, et fixe les textfields dans -awakeFromNib.
bon, j'ai essayé en conservant ma redéfinition de init, et en fixant mes variables dedans:
invoiceVendor = vendor;
invoiceDate = date;
invoiceAmount = amount;

et en fixant mes outlets dans le awakeFromNib:

-(void)awakeFromNib
{
NSLog(@"%@,%@,%@", myVendor, invoiceDate, invoiceAmount);
[self setInvoiceVendor:myVendor];
[self setInvoiceDate:invoiceDate];
[self setInvoiceAmount:invoiceAmount];
}

J'ai mis un petit NSLog pour voir ce qui se passait. En fait, je passe 2 fois dans le awake. La première fois le NSLog affiche Null,Null,Null et la deuxième fois mes valeurs.
Par contre rien dans les outlets.
si je force dans le awakeFromNib avec
[self setInvoiceVendor:@"toto"];

une idée?Merci!
 
c'était ça!
J'avais 2 fois l'instanciation de ma sous classe dans le nib...J'ai cru que j'allais devenir fou!
J'avais importé dans mon nib mon objet controller ET pas lié le file's owner à mon controller.
Conclusion je passais une fois avec les bonnes valeur et une deuxième sans donc finla: rien dans mes outlets.

Encore merci et à la prochaine au cocoa heads ;-)