Probleme dans l'affichage de tableView en cocoa

Vinche

Membre actif
20 Avril 2002
127
0
Salut tout le monde,
Je voudrais avoir cotre avis concernant le code suivant à savoir pourquoi il n’affiche pas le contenu de l’array dans la TableView? L’identifier de la seul colonne présente étant identifMe. J’ai déclarer les fonctions dans le header file de même que l’array et le dictionary.
D’après moi le problème doit venir de return records; puisque [records count ]; ne retourne rien. Mais je sais pas pourquoi. Merci d’avance.

#import "myDataSource.h"
@implementation myDataSource

- (NSMutableArray *) records{
myDict = [[NSMutableDictionary alloc]init];
records = [[NSMutableArray alloc] init];
[myDict setObject:@"Pottier" forKey: @"identifMe"];
[records addObject: myDict];
return records;
}

- (int)numberOfRowsInTableView
frown.gif
NSTableView *)aTableView{
return [records count];
}

- (id)tableView
frown.gif
NSTableView *)aTableView
objectValueForTableColumn
frown.gif
NSTableColumn *)aTableColumn
row
frown.gif
int)rowIndex
{
id theRecord, theValue;

NSParameterAssert(rowIndex >= 0 && rowIndex < [records count]);
theRecord = [records objectAtIndex:rowIndex];
theValue = [theRecord objectForKey:@"identifMe"];
return theValue;
}
 
Justement je crois que le problème est la. Mais je ne vois pas comment il faut faire. Le code doit être dans quel partie? le header file? Si c'est ça voila le code de mon header.
#import <Cocoa/Cocoa.h>
@interface myDataSource : NSObject
{ NSMutableArray *records;
NSMutableDictionary *myDict;
}

- (NSMutableArray *) records;

- (int)numberOfRowsInTableView
frown.gif
NSTableView *)aTableView;

- (id)tableView
frown.gif
NSTableView *)aTableView
objectValueForTableColumn
frown.gif
NSTableColumn *)aTableColumn
row
frown.gif
int)rowIndex;
@end

En fait je crois que je ne sais pas faire ressortir une donnée d'une fonction. return xxx; ne doit pas suffire pour que la valeur soit utilisable par une autre fonction?
 
En fait dans les 2 dernières methodes partout où tu as [ records method] tu dois faire [[self records] method]

D'autre part déclares tes 2 objets array et dictionnaire en les initialisant à nil puis au lieu de faire des alloc init utilise plutôt arrayWithCapacity:1 et dictionnaryWithCapacity:1. Car n'oublie pas que quand tu alloue des objets tu dois les gérer en les renvoyant avec un autorelease.

[21 avril 2002 : message édité par Manu]
 
Merci manu ça fonctionne. Pourquoi il y a besoin de mettre [self record]? De plus si je veux éditer les données dans la table il doit falloir utiliser une autre méthode parce que sinon j’ai un “signal 11 (SIGSEGV)”. Qu’est ce que ça veut dire?
Encore merci
 
Pourquoi [self records]? Parce que c'est la seule façon d'exécuter une methode à l'interieure d'une autre. Saches que tu fais toujours [objet methode] ici l'objet c"est l'objet que tu codes donc self. en Java c'est this.