Problème de NTableView

Illuvatar

Membre actif
28 Décembre 2004
148
5
37
Hello,

J'ai un problème qui me fait secher depuis maintenant bien 5 heures. J'ai failli jeter mon powerbook par la fenetre un nombre incalculable de fois.

Voilà je veux utiliser une NSTableView pour stocker des objets.
J'ai créé une classe Stockeur qui utilise un NSMutableArray :
Bloc de code:
#import "Convertisseur.h"
#import "Conversior.h"
#import "Stockeur.h"


@implementation Stockeur

-(id)init
{
if (self = [super init]) {
stock = [[NSMutableArray alloc] init];
}
return self;
}

-(IBAction)Memo:(id)sender
{
Conversior *novel;
novel = [[Conversior alloc] init];
[novel setNom:@"Nouveau facteur"];
[novel setFacteur:[taux floatValue]];
NSLog(@"%f",[taux floatValue]);
[stock addObject:novel];
[self updateUI];
int y = [stock count];
NSLog(@"%d facteurs", y);

}

-(void)updateUI
{
[registre reloadData];

}

-(int)numberOfRowsInTableView:(NSTableView *)aTableView
{
return [stock count];
}

- (id)tableView:(NSTableView *)aTableView
objectValueForTableColumn:(NSTableColumn *)aTableColumn
row:(int)rowIndex
{
NSString *identifier = [aTableColumn identifier];
Conversior *encour = [stock objectAtIndex:rowIndex];
NSLog(@"%@",[encour nom]);
return [encour valueForKey:identifier];
}

- (void)tableView:(NSTableView *)aTableView
setObjectValue:(id)anObject
forTableColumn:(NSTableColumn *)aTableColumn
row:(int)rowIndex
{
NSString *identifier = [aTableColumn identifier];
Conversior *encour = [stock objectAtIndex:rowIndex];
NSLog(@"%@",[encour nom]);
[encour takeValue:anObject forKey:identifier];
}



-(IBAction)util:(id)sender;
{
Conversior *currentChoice;
currentChoice = [stock objectAtIndex:[registre selectedRow]];
[taux setFloatValue:[currentChoice facteur]];
}

-(IBAction)supprim:(id)sender;
{
Conversior *currentChoice;
NSNumber *Index;
int choix;
NSEnumerator *e = [registre  selectedRowEnumerator];
NSMutableArray *fordelet = [NSMutableArray array];
while (Index = [e nextObject]) {
choix = [Index intValue];
currentChoice = [stock objectAtIndex:choix];
[fordelet addObject:currentChoice];
}
[stock removeObjectsInArray:fordelet];
[self updateUI];
}

-(void)tableViewSelectionDidChange:(NSNotification *)n
{
int row = [registre selectedRow];
[delet setEnabled: ([stock count] == 0)];
[delet setEnabled: (row != -1)];
[select setEnabled: (row != -1)];
}
@end

Il n'y a aucun problème de compilation. Tous les outlets et les actions sont bien reliées dans le fichier nib. Lorsque je clique sur ajouter, le log m'affiche "n+1 facteurs" ( dans mon NSMutableArray ) et tout marche normalement sauf que le NSTableView reste vierge. J'ai mis comme on peut le voir un NSLog dans les boucles de raffraichissement du NSTableView et celles ci ne sont jamais parcourues.
Comble du comble ce code source est un copier-coller d'un autre de mes programmes (mais créé sur Jaguar lui ) qui lui marche parfaitement. Est-ce un bug du à Tiger ou un truc que je n'arrive pas à voir.
Merci d'avance pour toute aide.
Si vous voulez sauver un Mac de l'horrible chute du 3eme étage qui l'attend inexorablement si je n'y arrive pas, aidez moi :D.

@+
 
N'Aurais tu pas oublier de faire le lien DataSource entre ta classe et le NSTableView dans Interface Builder ?
 
Hello,

Thx pr ta réponse mais j'ai reverifié à l'instant et le lien était bien fait ( j'ai même déconnecté et reconnecté le lien pour être sur ^^)
( Une question lorsque tu dit lien Datasource c bien le lien classique de Interface builder qu'on utilise pr tout avec la touche ctrl ?? )
 
Attention, il y a plusieurs liens possibles !!
Dans le cas présent, il faut un lien entre le NSTableView de la vue et ta classe.
Quand tu selectionnes le NSTableView (attention, il faut cliquer plusieurs fois dessus; il ne faut pas avoir NSScrollView), et que tu regardes les connections, la connection dataSource doit être renseignée
 
Arggg thx j'avais totalemennt oublié ce truc. Merci beaucoup ca marche :D.
Tu viens de sauver un mac ( et son utilisateur accesoirement ).
Thx encore.

@+