Spécification des types d'attributs d'une table

Pascal Délisle

Membre junior
20 Février 2003
39
0
Visiter le site
Bonjour,

J'ai écrit une fonction qui me permet d'ajouter un enregistrement à une table de type NSTableView. Voici cette fonction:

- (NSDictionary *)creerResultat
{
NSMutableDictionary *resultat = [[NSMutableDictionary alloc] init];

[resultat setObject:[dateTirage stringValue] forKey:mad:"Date"];
[resultat setObject:[[resultatPrincipal cellAtRow:0 column:0] stringValue] forKey:mad:"1"];
[resultat setObject:[[resultatPrincipal cellAtRow:0 column:1] stringValue] forKey:mad:"2"];
[resultat setObject:[[resultatPrincipal cellAtRow:0 column:2] stringValue] forKey:mad:"3"];
[resultat setObject:[[resultatPrincipal cellAtRow:0 column:3] stringValue] forKey:mad:"4"];
[resultat setObject:[[resultatPrincipal cellAtRow:0 column:4] stringValue] forKey:mad:"5"];
[resultat setObject:[[resultatPrincipal cellAtRow:0 column:5] stringValue] forKey:mad:"6"];
[resultat setObject:[complementaire stringValue] forKey:mad:"7"];

return resultat;
}

Grosso modo, un enregistrement comporte un champ de date ainsi que sept numéros (entiers). Le problème est que lorsque je crée un enregistrement, ma fonction considère les entiers comme des chaînes de caractères. Même ma date est considérée comme une chaîne de caractères.

1) Comment spécifier dans ma fonction que mes attributs sont des entiers (integer) et non pas des simples chaînes?

2) Comment spécifier que ma date est un attribut de date?

3) Comment trier automatiquement ma table par ordre chronologique inverse (date)?

Merci à l'avance.
 

la tortue

Membre confirmé
6 Novembre 2003
397
1
Tu utilise la méthode -[NSCell stringValue] qui te renvoies un objet NSString, et c'est plutôt normal.

Pour avoir un obet NSNumber ou NSDate, utilise plutôt la méthode -[NSCell objectValue] qui renvoie le bon objet pour peu qu'il y ait un formatter dans ta cellule...
 

Pascal Délisle

Membre junior
20 Février 2003
39
0
Visiter le site
Merci La Tortue pour ces informations. Il me reste deux questions:

1) Comment puis-je réinitialiser l'affichage de mes boîtes de texte NSTextField? Autrement dit, j'aimerais lancer une commande pour les vider. J'ai essayé de mettre la valeur de l'objet à "", mais ça bloque.

2) Comment faire en sorte que les enregistrements de ma table soient triés automatiquement selon le champ de la date?


Merci encore.
 

la tortue

Membre confirmé
6 Novembre 2003
397
1
1) Comment puis-je réinitialiser l'affichage de mes boîtes de texte NSTextField? Autrement dit, j'aimerais lancer une commande pour les vider. J'ai essayé de mettre la valeur de l'objet à "", mais ça bloque.
Utilise plutôt -[text_field setStringValue:mad:""]; ça devrait marcher.

Comment faire en sorte que les enregistrements de ma table soient triés automatiquement selon le champ de la date?
Si ta table utilise un data-source, trie tes données comme tu veux puis appelle -[NSTableView reloadData], sinon utilise un data-source.
 

Pascal Délisle

Membre junior
20 Février 2003
39
0
Visiter le site
Merci encore, La Tortue. J'ai essayé d'utiliser la fonction setStringValue. Or, lorsque je réinitialise mes champs de cette manière, je ne peux plus cliquer dedans à nouveau et je suis incapable d'entrer à nouveau du texte. Mes spécifications pour le contenu (formatter) sont les suivantes: des chiffres entre 1 et 49. Une idée pour résoudre mon problème?

Quant au tri de la table, j'ai effectivement une source de données basée sur un NSMutableDictionary stocké dans un fichier .plst. Or, j'aimerais pouvoir trier automatiquement ces données par date. Y a-t-il un attribut à spécifier dans Interface Builder? Dois-je trier la table à chaque fois que j'insère un nouvel enregistrement? Si oui, comment?
 

la tortue

Membre confirmé
6 Novembre 2003
397
1
Or, lorsque je réinitialise mes champs de cette manière, je ne peux plus cliquer dedans à nouveau et je suis incapable d'entrer à nouveau du texte.
On dirait un problème de keyboard view loop. J'ai déjà eu ce genre de problème. Essaie d'utiliser la méthode -[NSWindow makeFirstResponder: ] ou vérifie que ta keyboard view loop est correcte qu'il y a bien un initial first responder, etc... Je ne sais pas exactement d'où vient le problème, en fait.


Dois-je trier la table à chaque fois que j'insère un nouvel enregistrement? Si oui, comment?
C'est à toi de trier tes données par date, pour cela tu peux utiliser les méthodes -[NSMutableArray sortUsingSelector: ] ou -[NSMutableArray sortUsingFunction: ], cela peut-être un peu fastidieux, et dépend de la manière dont test données sont arrangées. Si j'ai bien compris tu as un dictionnary avec pour chaque identifiant de colonnes un tableau avec les données pour chaque cellule de ta colonne. C'est pas forcément la meilleure solution. Si tu avais un tableau (array) de dictionnary pour chaque ligne, cela simplifierait ton problème de tri...