NSOutlineView qui merde

TchouboudouTchouboudou Membre
02:33 modifié dans API AppKit #1
Bonsoir les gens... Aujourd'hui, j'ai essayé d'insérer une p'tit machin qui change l'icône d'une ligne d'un NSOutlineView quand on "expand" ou qu'on "collapse" une ligne (pour reprendre dres termes anglophones). Tout ça marche très bien, si j'ai une seul ligne qui peut s'"expander" et s'"collapser". Malheuresement, ça ne marche plus quand il y en a plus. J'ai galérer 3 heures, et j'ai trouvé le source de mon problème : c'est le [outline reloadData] qui fait merder, dans la toute dernière méthode (celle qui gère l'ouverture). Voici mon code :

- (id)outlineView:(NSOutlineView *)outlineView child:(int)index ofItem:(id)item<br />{<br />	if (nil == item)<br />		return [theData objectAtIndex:index];<br />	else if ([[[(NSDictionary *)item objectForKey:@&quot;Genre&quot;] objectAtIndex:index] isEqualToString:@&quot;seul&quot;])<br />		return [item objectAtIndex:index];<br />	else<br />		return [[(NSDictionary *)item objectForKey:@&quot;Childs&quot;] objectAtIndex:index];<br />}<br /><br />- (BOOL)outlineView:(NSOutlineView *)outlineView isItemExpandable:(id)item<br />{<br />	if ((nil == item) || [item objectForKey:@&quot;Childs&quot;])<br />		return YES;<br />	else<br />		return NO;<br />}<br /><br />- (int)outlineView:(NSOutlineView *)outlineView numberOfChildrenOfItem:(id)item<br />{<br />	if (nil == item)<br />		return [theData count];<br />	else if ([[(NSDictionary *)item objectForKey:@&quot;Genre&quot;] isEqualToString:@&quot;seul&quot;])<br />		return 4;<br />	else<br />		return [[item objectForKey:@&quot;Childs&quot;] count];<br />}<br /><br />- (id)outlineView:(NSOutlineView *)outlineView objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item<br />{<br />	if ([[tableColumn identifier] isEqualToString:@&quot;Image&quot;])<br />	{<br />		NSImage *image = [NSImage imageNamed:[item objectForKey:@&quot;Image&quot;]];<br />		[image setSize:NSMakeSize(16, 16)];<br />		return image;<br />	}<br />	else<br />		return [item objectForKey:[tableColumn identifier]];<br />}<br /><br />- (void)outlineViewItemDidCollapse:(NSNotification *)notification<br />{<br />	open = 0;<br />	[outline reloadData];<br />}<br /><br />- (void)outlineViewItemDidExpand:(NSNotification *)notification<br />{<br />	open = 1;<br />}


Pouvez-vous m'aider ?

Merci d'avance,
Tchouboudou

PS : le bug, c'est que ça ferme l'application : OutlineView has exited due to signal 10 (SIGBUS).

Réponses

  • 02:33 modifié #2
    Heu c'est un peu con, mais suffit que tu retires [outlineView reloadData]; étant donné que c'est automatiquement appelé :

    <br /><br />- (void)outlineViewItemDidCollapse:(NSNotification *)notification<br />{<br />	open = 0;<br />}<br /><br />- (void)outlineViewItemDidExpand:(NSNotification *)notification<br />{<br />	open = 1;<br />}<br /><br />
    


    Voilà , ça devrait fonctionner maintenant ;-)
  • TchouboudouTchouboudou Membre
    02:33 modifié #3
    ça marche, merci beaucoup...
Connectez-vous ou Inscrivez-vous pour répondre.