Pb de variable d'instances dans drawRect
muqaddar
Administrateur
Salut les jeuns,
J'ai un soucis pour lire une variable d'instance dans une classe NSView dans ma méthode drawRect :
[tt]@implementation Bouteille
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
nbreBouteillesL = [[NSNumber alloc] init];
nbreBouteillesH = [[NSNumber alloc] init];
}
return self;
}
//récupération des valeurs du controlleur
- (void)bouteillesPourLargeur:(NSNumber*)l andHauteur:(NSNumber*)h
{
[l retain];
[nbreBouteillesL release];
nbreBouteillesL=l;
}
- (void)drawRect:(NSRect)rect {
NSLog(@Largeur : %@", nbreBouteillesL);
}
[/tt]
Seulement le nslog m'affiche (null).
Si je le mets dans la méthode bouteillesPourLargeur, il m'affiche bien la bonne valeur...
J'ai un soucis pour lire une variable d'instance dans une classe NSView dans ma méthode drawRect :
[tt]@implementation Bouteille
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
nbreBouteillesL = [[NSNumber alloc] init];
nbreBouteillesH = [[NSNumber alloc] init];
}
return self;
}
//récupération des valeurs du controlleur
- (void)bouteillesPourLargeur:(NSNumber*)l andHauteur:(NSNumber*)h
{
[l retain];
[nbreBouteillesL release];
nbreBouteillesL=l;
}
- (void)drawRect:(NSRect)rect {
NSLog(@Largeur : %@", nbreBouteillesL);
}
[/tt]
Seulement le nslog m'affiche (null).
Si je le mets dans la méthode bouteillesPourLargeur, il m'affiche bien la bonne valeur...
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
[tt]
- (id)initWithFrame:(NSRect)frame {
self = [super initWithFrame:frame];
if (self) {
nbreBouteillesL = [[NSNumber alloc] initWithInt:1];
nbreBouteillesH = [[NSNumber alloc] initWithInt:1];
}
return self;
}
[/tt]
est appellé dans le awakeFromNib de la couche controlleur, donc devrait remplir les champs avant le drawRect non ?
sinon, ça ne serait pas plus simple d'utiliser des int au lieu d'objets ? comme ça, plus de retain/release/alloc/init/etc... parce que bon, pour stocker un entier, à moins que tu aies besoin de les ranger dans des dictionaries/arrays, c'est un peu lourd...
par ailleurs, je crois que ton iniWithFrame n'est pas appelé si ton objet est créé dans le nib...
- (void)bouteillesPourLargeur:(NSNumber*)l andHauteur:(NSNumber*)h
avce des NSLogs.
J'utilise NSNumber pour m'en servir comme variable d'instance, ce que ne permet pas int, non ?
Là , les valeurs changent bien, mais drawRect ne les voit tjs pas... alors que
- (void)bouteillesPourLargeur:(NSNumber*)l andHauteur:(NSNumber*)h
les voit.
et si tu mettais un [self display] à la fin de bouteillesPourLargeur:hauteur: ?
[self setNeedsDisplay:YES];
déjà fait...
rien à faire drawRect ne voit pas les 2 vars d'instance à jour...
Pas de soucis, je fais des tests.
[Fichier joint supprimé par l'administrateur]
dans ton nib, tu as deux instances de ta view bouteille: une dans la fenêtre, et une autre à la racine du nib.
l'outlet de ton contrôleur pointe vers celle à la racine du nib, pas vers celle affichée dans la fenêtre.
supprime celle à la racine du nib et fais pointer l'outlet du contrôleur vers la nsview dans la fenêtre et ça roule...
Merci cbrandt.
Je me fais avoir à créer toujours une instance à la racine du nib et m'en servir à la place de l'instance de la view qui est dans la fenêtre.