Un drôle de bug

19:03 modifié dans API AppKit #1
Hello,

Désolé pour titre pas très explicite, mais ça aurait fait un titre plutôt long sinon..
Je m'explique,
Je suis entrain de faire un gestionnaire de téléchargements. Pour avoir un NSProgressIndicator dans chaque ligne de mon tableau de telechargements, j'ai choisi de lui insérer une NSView pour chaque téléchargement.
ça fait 1 an que j'utilise cette technique et là  elle ne semble pas marcher sous Leopard. Cependant j'ai lancé un vieux programme à  moi pour voir quand même si c'était pas plutôt mon code, et oui en effet, c'est mon code, car mon vieux programme marche très bien.

Voici les implémentation de ma tableview :
<br />- (void)test<br />{<br />	id subviewTest = [SubviewController controller];<br /><br />	[subviewTest setNameField:@&quot;TEST DE MERDE&quot;];<br />	[data addObject:subviewTest];<br />	[self reloadDataTable];<br />}<br />- (void)reloadDataTable<br />{<br />	 while ([[self subviews] count] &gt; 0){<br />		[[[self subviews] lastObject] removeFromSuperviewWithoutNeedingDisplay];<br />	}<br />	[self reloadData];<br />}<br /><br /><br />- (int) numberOfRowsInTableView:(NSTableView *) tableView<br />{<br />&nbsp; &nbsp; return [data count];<br />}<br /><br />- (id) tableView:(NSTableView *) tableView objectValueForTableColumn:(NSTableColumn *) tableColumn row:(int) row<br />{<br />&nbsp; &nbsp; id obj = nil;<br />&nbsp; &nbsp; <br /><br />&nbsp; &nbsp; <br />&nbsp; &nbsp; return obj;<br />}<br />- (void) tableView:(NSTableView *) tableView willDisplayCell:(id) cell forTableColumn:(NSTableColumn *) tableColumn row:(int) row<br />{<br />	[(StatusCell *)cell addSubview:[[data objectAtIndex:row] view]];<br />	<br />}<br />


StatusCell est une sous-classe de NSCell qui était fournie dans l'exemple que j'avais choppé. Donc pas de problème pour cette sous-classe, rien n'a été modifié donc elle marche parfaitement bien.

Pour mon SubviewController, c'est en fait une sous-classe de NSObject.
Voici le fichier implémentation de mon SubviewController :
<br />+ (id) controller<br />{<br />&nbsp; &nbsp; return [[[self alloc] init] autorelease];<br />}<br /><br />- (id) init<br />{<br />&nbsp; &nbsp; if ((self = [super init]) != nil)<br />&nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; if (![NSBundle loadNibNamed: @&quot;Subview&quot; owner: self])<br />&nbsp; &nbsp; &nbsp; &nbsp; {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [self release];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self = nil;<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; }<br />&nbsp; &nbsp; <br />&nbsp; &nbsp; return self;<br />}<br /><br />- (void)dealloc<br />{<br />	[subview release];<br />	[super dealloc];<br />}<br /><br /><br />- (NSView*)view<br />{<br />	return subview;<br />}<br />- (void)setNameField:(NSString*)string<br />{<br />	[nameField setStringValue:string];<br />}<br />- (void)setIcon:(NSImage*)icon<br />{<br />	[icon setSize:NSMakeSize(32,32)];<br />	[iconView setImage:icon];<br />}<br />


Le problème est que je n'arrive pas à  avoir le rafraà®chissement de ma "subview" de "SubviewController". Lorsque j'appelle la méthode "setNameField:", mon "nameField" n'est pas modifié. En revanche, et c'est là  que c'est bizarre, lorsque j'appelle la méthode "setIcon:", il me met bien l'image que je lui envoie dans la NSImageView de ma subview oO

Alors je ne comprend pas.. Apparemment OK pour l'image, mais pour tout le reste non :/ y compris pour incrémenter un NSProgressIndicator..

Réponses

  • 19:03 modifié #2
    Bug résolu, on dirait qu'il n'aimait pas mes "setNameField:" et tout ça. J'ai fait un test en remplaçant setNameField par setNameDownload juste pour tester et là  ça marche  B)
Connectez-vous ou Inscrivez-vous pour répondre.