Qu'est-ce que tu veux faire avec ce code ? Tu ne nous dis rien à son propos : on ne sait pas ce qu'il doit faire, pourquoi il doit le faire, quel est le problème, etc. Il manque beaucoup d'informations, tu auras beaucoup de mal à obtenir de l'aide avec ce genre de message...
Bonjour à tous . Je voudrais faire fonctionner un tableau ... dure dure . Par exemple comment lui faire reconnaitre 11 column et un nombre illimité de row ??? NSString *identifier-=[aTableColumn identifier]; et après je ne trouve pas . schlum quelle accolade ? Merci a tous .
Il parle de l'accolade qui se trouve juste après @implementation AppController... Celle-ci est très mal placée... Il ne devrait pas y avoir d'accolade à cet endroit, mais elle devrait être après le nom de la fonction pour contenir sa définition.
Sinon pour ton problème de tableau toujours aussi peu détaillé... Pour commencer, dans Interface Builder, tu glisses un NSTableView sur ta fenêtre et en utilisant l'inspecteur tu lui mets 11 colonnes, ensuite tu donnes un identifier à chaque colonne, et pour finir tu lis sont outlet "dataSource" à un objet qui servira donc de source de données au tableau. L'objet doit appartenir à une classe qui définit les méthodes :
La première renvoie le nombre de ranger à afficher, la deuxième renvoie l'objet à afficher dans la case désignée par la colonne aTableColumn et par la rangé d'index rowIndex.
Le plus simple est de créer une nouvelle classe dont chaque objet contiendra une rangée de données du tableau. Donc si tu as 11 colonnes dans ton tableau, cette classe contiendra 11 variables d'instances de types divers et variés. Les identifiants (pas les noms) des colonnes doivent être les mêmes que les noms des variables d'instance pour faciliter les choses.
Ensuite, ton dataSource aura comme variable d'instance principale un NSMutableArray qui contiendra uniquement des instances de la classe décrite ci-dessus. Pour finir, dans la méthode
Psychoh13 Merci Ma première tentative allait dans ce sans .... Autant de NSarrayController que de Column . Mais , pour le parametrage des connections bonjour l' angoisse Impossible de "déméler les files"......Dolipranne .......1000Kg....Hum!
Donc j'ai essayé avec un "shell" qui transmets les infos N° . NOMS . SCORES . Ou je bloque c'est pour le parametrage .... que lui dire .? pour qu' il insere le score au fure et a mesure je ne sais pas comment lui faire reconnaitre mes identifiants ..... Toutes les infos ou les exemples que je trouvent sont en anglais , nous somment bête à ce point . Encore merci
Oula, ton code est beaucoup trop compliqué... Et faire un NSArrayController par colonne ce n'est pas du tout ce que je conseille. Pour commencer, quand tu as du code à montrer, ne fait une capture d'écran ! C'est prend de la place en trop pour rien et c'est pas lisible ni recopiable pour faire des tests. Tu fais un copier coller de ton code et tu utilises les balises de code fournies par le forum (tu cliques sur le bouton avec # dessus pour les ajouter à ton message).
Il faut que tu crées une classe qui va contenir les données, et chaque colonne de ton tableau correspondra à une variable d'instance de la classe.
Par exemple là tu indiques "nom", "scores", "total", "classement", et bien tu fais une classe comme ça :
@interface ScoreJeu : NSObject {<br /> NSString *nom;<br /> int scores; // je ne sais pas quel type tu préfères, peut-être un type personnalisé qui sait...<br /> int total;<br /> int classement;<br />}<br /><br />@end
Et après, tu auras UN SEUL NSMutableArray (non pas NSArrayController) qui contiendra des instances de ScoreJeu, et en utilisant valueForKey: tu récupères les valeurs de chaque objet :
Cette ligne ne marche que si tu as mis comme identifiant des colonnes les mêmes noms que les variables d'instance.
PS : dans la capture d'écran que tu nous montres tu as mis un tiret devant "classement" alors que tu as mis un underscore devant tous les autres noms. D'ailleurs la pratique du underscore pour les noms de variables d'instance est une pratique déconseillée, et ici elle n'est pas vraiment utile.
Bonsoir à tous . Je n' arrête pas de me faire rentrer dedans ..javascript:void(0);. Dites moi , j'ai trouvé des exemples de ligne de codes dans vos files de discussions qui m' interressent : Puis-je les utiliser ? Dois-je demander l'autorisation à l' auteur ? Merci et Cordialement .
Merci encore . Mais Euh .. ben .. euh ! Je ne suis pas arrivé à le faire fonctionné . Je n'osais pas le dire et te " Vous " demander + ....? Impossible de rentrer du texte dans mon " Tableau " Oui , je suis nul . Vous = FOC .. Si je vous " envoies " quelques lignes de code de mon cru , accepterez-vous de les corriger ? Quelques Explications gratuites :Retraité , veuf depuis peu , seul .. désespérément seul ; je me " défoule" avec Xcode .Inondé de chagrin je rame à tous les étages . Cordialement.
On peut mettre tout sur la même ligne ? J'avais essayé et j'obtenais un message d' erreur. Donc avec cette ligne ,toutes les colonnes seront reconnues ? Quelle (je ne sais dire ) code permets après compile d'ecrire des infos ? Psychoh13 ma guidé mais je ne suis pas parvenu a trouvé les bons mots (s'est rageant ) Merci
On peut mettre tout sur la même ligne ? J'avais essayé et j'obtenais un message d' erreur. Donc avec cette ligne ,toutes les colonnes seront reconnues ? Quelle (je ne sais dire ) code permets après compile d'ecrire des infos ? Psychoh13 ma guidé mais je ne suis pas parvenu a trouvé les bons mots (s'est rageant ) Merci
Oui, on peut tout mettre sur la même ligne... poru "remplir", il faut utiliser le dataSource. Nul besoin d'avoir un outlet sur chaque colonne !
Bonjour . J'ai beau lire et relire la doc que je possède , je ne comprends pas . A chaque fois que je me dit Eureka ..Ploufffff. J'ai declaré mon objet helper en dataSource --->initialFirstResponder ...ecris les 3 méthodes . Ne riez pas sniffffff ..GLouppp Gloubbb Glou glouuuuuuu Je coule ..javascript:void(0); C'est ..++.. Oui , je suis trop têtu ... Qui me tendras une perche . Merci .
Moi je te conseille "Cocoa par la pratique" d'Aaron Hillegass, car justement le premier exemple / tuto dans son livre c'est la gestion d'un NSTableView
Oui schlum , Merci J'ai lu et relu cet article , plusieurs fois . Si je suis le tuto ...... Ok tout marche . Si le l' " adapte à la sauce Gogaule " + rien ne fonctionne . Il y as des choses que je ne comprends pas .....("Lithote"). Les " ordres de bases " sont les mêmes pour un tableau à 2 Colonnes ou à 11 colonnes ?
Oui c'était ce que pensais avoir compris . [aTableColumn identifier] ok mais comment je lui dit 1ere ligne 2eme ? C'est dans les "gènes" , automatique Dans tous les exemples que j'ai trouvé ,il n' y as pas de "spécification" Oui merci , à force d'essayer de comprendre , tout s'embrouille . Si je déclare 11 columns comment il s'y retrouve .?
Ben... La ligne est donnée par "rowIndex" ??? Après en général dans le dataSource on gère les données avec un NSArray contenant des NSDictionary Donc ça donne un truc du genre :
Schlum, il y a plus simple que le NSDictionary, tu fais une classe contenant une variable d'instance pour chaque colonne, et les identifiants des colonnes portent les noms des variables d'instance.
Bah moi j'aime bien les NSDictionary... Surtout que Apple a déjà implémenté tout ce qu'il faut pour que ça soit optimisé.
Par exemple, en demandant "objectForKey", il y a une table de hashage et un algorithme de dichotomie qui fait qu'il trouve très vite l'objet. Alors que si on fait un objet, obtenir un système aussi performant n'est pas forcément facile.
Bah avec NSObject, tu as directement la méthode "-valueForKey:" qui fonctionne sur le même principe que pour le dictionnaire à la différence qu'il va directement récupérer la valeur dans l'objet, et cette valeur n'a pas besoin d'être un objet, la méthode convertis directement la valeur en NSNumber par exemple s'il s'agit d'un entier ou d'un flottant.
De plus, un NSDictionary t'oblige à maintenir une série de clé-valeurs et oblige de tout gérer dans la classe servant de data-source, tu as en plus besoin de créer un dictionnaire pour chaque valeur, c'est-à -dire que ça va prendre deux fois plus de mémoire non seulement pour stocker les clés mais aussi les valeurs qui sont copiés par le NSDictionary en plus des tables de hachage.
Alors qu'avec les objets la description est stockée dans un unique objet Class, les valeurs sont stockés en mémoire directement et n'ont pas un tableau de clé qui leur est attaché à chacun d'eux, les clés permettant de reconnaà®tre chaque champ sont stockés de façon unique dans l'objet Class plutôt qu'une fois par objet. De plus, il est possible, en plus du stockage, de définir le comportement de l'objet distinctement du comportement du data source, comme l'e permet la programmation objet.
Schlum Psychoh13 (Je voulais écrire Marie @% qui )mais vous n'appréciez pas mon humour . Merci , pour vos très savantes explications ,
dans 1201266255:
Schlum, il y a plus simple que le NSDictionary, tu fais une classe contenant une variable d'instance pour chaque colonne, et les identifiants des colonnes portent les noms des variables d'instance.
Expliquez moi + Les identifiants portent le nom des variables (@partie1,@partie2 ...)ce que tu m'expliquait plus avant ? je n'ai pas trouvé les bons "thermes" . Si je parviens à faire fonctionner mon "Chose (Majuscule)" je vous serai redevable d' un carton de Bordeaux <
Réponses
Tu ne nous dis rien à son propos : on ne sait pas ce qu'il doit faire, pourquoi il doit le faire, quel est le problème, etc.
Il manque beaucoup d'informations, tu auras beaucoup de mal à obtenir de l'aide avec ce genre de message...
Je voudrais faire fonctionner un tableau ... dure dure .
Par exemple comment lui faire reconnaitre 11 column et un nombre illimité de row ???
NSString *identifier-=[aTableColumn identifier]; et après je ne trouve pas .
schlum quelle accolade ?
Merci a tous .
Sinon pour ton problème de tableau toujours aussi peu détaillé...
Pour commencer, dans Interface Builder, tu glisses un NSTableView sur ta fenêtre et en utilisant l'inspecteur tu lui mets 11 colonnes, ensuite tu donnes un identifier à chaque colonne, et pour finir tu lis sont outlet "dataSource" à un objet qui servira donc de source de données au tableau.
L'objet doit appartenir à une classe qui définit les méthodes :
La première renvoie le nombre de ranger à afficher, la deuxième renvoie l'objet à afficher dans la case désignée par la colonne aTableColumn et par la rangé d'index rowIndex.
Le plus simple est de créer une nouvelle classe dont chaque objet contiendra une rangée de données du tableau. Donc si tu as 11 colonnes dans ton tableau, cette classe contiendra 11 variables d'instances de types divers et variés. Les identifiants (pas les noms) des colonnes doivent être les mêmes que les noms des variables d'instance pour faciliter les choses.
Ensuite, ton dataSource aura comme variable d'instance principale un NSMutableArray qui contiendra uniquement des instances de la classe décrite ci-dessus. Pour finir, dans la méthode la définition consistera simplement à retourner le nombre d'éléments dans le NSMutableArray.
Et enfin la méthode
retournera chaque valeur indiquée par les "coordonnées" en utilisant la méthode tu récupères dans le NSMutableArray l'objet au rang donné et tu récupères avec l'identifiant de NSTableColumn l'objet avec valueForKey:.
Voilà tu as toute la procédure, au boulot...
cet autre morceau de code ?
Merci
Ma première tentative allait dans ce sans ....
Autant de NSarrayController que de Column . Mais , pour le parametrage des connections bonjour l' angoisse
Impossible de "déméler les files"......Dolipranne .......1000Kg....Hum!
Donc j'ai essayé avec un "shell" qui transmets les infos N° . NOMS . SCORES .
Ou je bloque c'est pour le parametrage .... que lui dire .? pour qu' il insere le score au fure et a mesure
je ne sais pas comment lui faire reconnaitre mes identifiants .....
Toutes les infos ou les exemples que je trouvent sont en anglais , nous somment bête à ce point .
Encore merci
Pour commencer, quand tu as du code à montrer, ne fait une capture d'écran ! C'est prend de la place en trop pour rien et c'est pas lisible ni recopiable pour faire des tests.
Tu fais un copier coller de ton code et tu utilises les balises de code fournies par le forum (tu cliques sur le bouton avec # dessus pour les ajouter à ton message).
Il faut que tu crées une classe qui va contenir les données, et chaque colonne de ton tableau correspondra à une variable d'instance de la classe.
Par exemple là tu indiques "nom", "scores", "total", "classement", et bien tu fais une classe comme ça :
Et après, tu auras UN SEUL NSMutableArray (non pas NSArrayController) qui contiendra des instances de ScoreJeu, et en utilisant valueForKey: tu récupères les valeurs de chaque objet :
Cette ligne ne marche que si tu as mis comme identifiant des colonnes les mêmes noms que les variables d'instance.
PS : dans la capture d'écran que tu nous montres tu as mis un tiret devant "classement" alors que tu as mis un underscore devant tous les autres noms.
D'ailleurs la pratique du underscore pour les noms de variables d'instance est une pratique déconseillée, et ici elle n'est pas vraiment utile.
Je n' arrête pas de me faire rentrer dedans ..javascript:void(0);.
Dites moi , j'ai trouvé des exemples de ligne de codes dans vos files de discussions qui m' interressent :
Puis-je les utiliser ? Dois-je demander l'autorisation à l' auteur ?
Merci et Cordialement .
Mais ce que je t'ai donné comme exemple ne va pas ?
Mais
Euh .. ben .. euh !
Je ne suis pas arrivé à le faire fonctionné .
Je n'osais pas le dire et te " Vous " demander + ....?
Impossible de rentrer du texte dans mon " Tableau "
Oui , je suis nul .
Vous = FOC ..
Si je vous " envoies " quelques lignes de code de mon cru , accepterez-vous de les corriger ?
Quelques Explications gratuites :Retraité , veuf depuis peu , seul .. désespérément seul ; je me " défoule" avec Xcode .Inondé de chagrin je rame à tous les étages .
Cordialement.
Tu retires le dossier build et tu le compresses pour l'envoyer...
"te" demander : c'est de rigueur ...
Les intervenants sur ce site partagent la même passion ...
@+
#import <Cocoa/Cocoa.h>
@interface MyObject : NSObject
{
NSMutableArray *inscriptions;
IBOutlet NSTableView *tableView;
IBOutlet NSTableColumn *numero;
IBOutlet NSTableColumn *noms;
IBOutlet NSTableColumn *partie1;
IBOutlet NSTableColumn *partie2;
IBOutlet NSTableColumn *partie3;
IBOutlet NSTableColumn *partie4;
IBOutlet NSTableColumn *partie5;
IBOutlet NSTableColumn *partie6;
IBOutlet NSTableColumn *partie7;
IBOutlet NSTableColumn *total;
IBOutlet NSTableColumn *classement;
}
- (IBAction)additionnePartie:(id)action;
- (IBAction)trieTotal:(id)action;
- (int)numberOfRowsInTableView:(NSTableView *)aTableView;
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
- (void)tableView:(NSTableView *)atableView setObjecValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex;
- (void)updateUI;
- (void)additionnePartie;
@end
cela vous parait il '''juste'''
Merci
PS: vous correspond à vous tous !
PS : pourquoi un besoin d'IBOutlet par NSTableColumn ? Celui du tableau ne suffit pas ?
J'avais essayé et j'obtenais un message d' erreur.
Donc avec cette ligne ,toutes les colonnes seront reconnues ?
Quelle (je ne sais dire ) code permets après compile d'ecrire des infos ?
Psychoh13 ma guidé mais je ne suis pas parvenu a trouvé les bons mots (s'est rageant )
Merci
Oui, on peut tout mettre sur la même ligne...
poru "remplir", il faut utiliser le dataSource. Nul besoin d'avoir un outlet sur chaque colonne !
J'ai beau lire et relire la doc que je possède , je ne comprends pas . A chaque fois que je me dit Eureka ..Ploufffff.
J'ai declaré mon objet helper en dataSource --->initialFirstResponder ...ecris les 3 méthodes .
Ne riez pas sniffffff ..GLouppp Gloubbb Glou glouuuuuuu Je coule ..javascript:void(0);
C'est ..++.. Oui , je suis trop têtu ... Qui me tendras une perche .
Merci .
Merci
J'ai lu et relu cet article , plusieurs fois .
Si je suis le tuto ...... Ok tout marche .
Si le l' " adapte à la sauce Gogaule " + rien ne fonctionne .
Il y as des choses que je ne comprends pas .....("Lithote").
Les " ordres de bases " sont les mêmes pour un tableau à 2 Colonnes ou à 11 colonnes ?
Il y a une méthode du dataSource qui est appelée pour savoir quoi mettre à telle ligne et telle colonne, toujours la même...
Le principe ensuite c'est d'utiliser "[aTableColumn identifier]" pour savoir de quelle colonne on parle.
c'était ce que pensais avoir compris .
[aTableColumn identifier] ok mais comment je lui dit 1ere ligne 2eme ? C'est dans les "gènes" , automatique
Dans tous les exemples que j'ai trouvé ,il n' y as pas de "spécification"
Oui merci , à force d'essayer de comprendre , tout s'embrouille .
Si je déclare 11 columns comment il s'y retrouve .?
Après en général dans le dataSource on gère les données avec un NSArray contenant des NSDictionary
Donc ça donne un truc du genre :
Par exemple, en demandant "objectForKey", il y a une table de hashage et un algorithme de dichotomie qui fait qu'il trouve très vite l'objet.
Alors que si on fait un objet, obtenir un système aussi performant n'est pas forcément facile.
De plus, un NSDictionary t'oblige à maintenir une série de clé-valeurs et oblige de tout gérer dans la classe servant de data-source, tu as en plus besoin de créer un dictionnaire pour chaque valeur, c'est-à -dire que ça va prendre deux fois plus de mémoire non seulement pour stocker les clés mais aussi les valeurs qui sont copiés par le NSDictionary en plus des tables de hachage.
Alors qu'avec les objets la description est stockée dans un unique objet Class, les valeurs sont stockés en mémoire directement et n'ont pas un tableau de clé qui leur est attaché à chacun d'eux, les clés permettant de reconnaà®tre chaque champ sont stockés de façon unique dans l'objet Class plutôt qu'une fois par objet. De plus, il est possible, en plus du stockage, de définir le comportement de l'objet distinctement du comportement du data source, comme l'e permet la programmation objet.
Psychoh13 (Je voulais écrire Marie @% qui )mais vous n'appréciez pas mon humour .
Merci , pour vos très savantes explications ,
Expliquez moi + Les identifiants portent le nom des variables (@partie1,@partie2 ...)ce que tu m'expliquait plus avant ? je n'ai pas trouvé les bons "thermes" .
Si je parviens à faire fonctionner mon "Chose (Majuscule)" je vous serai redevable d' un carton de Bordeaux <
NSObject n'implémente pas par défaut <NSKeyValueCoding>
Ou alors tu parles des propriétés d'Obj-C 2.0
En tout cas ça sent violemment la violation du principe d'encapsulation tout ça :P
Schlum
Je plane déja , pas la peine d' en rajouter .
Merci .
@implementation MyObject
- (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn*) row:(int)rowIndex
{
// Quel est l'identificateur de la colonne
NSString *identifier = [aTableColumn identifier];
return [row valueForKey:identifier];
}
- (void)tableview:(NSTableview *)aTableView setObjectValue:(id)anObject forTableColumn:(NSTableColumn *)aTableColumn row:(id)rowIndex
{
Row *row = [inscriptions objectAtIndex:rowIndex];
NSString *identifier = [aTableColumn identifier];
}
- (void)awakeFromNib
{
NSUserDefaults* defaults;
defaults = [NSUserDefaults standardUserDefaults];
[numeroField setStringValue:([defaults stringForKey:@numero] ==nil)? NSLocalizedString(@numero,@numero):[defaults stringForKey:@numero];
[nomsField setStringValue:([defaults stringForKey:@noms] ==nil)? NSLocalizedString(@noms,@noms):[defaults stringForKey:@noms];
[partie1Field setStringValue:([defaults stringForKey:@partie1] ==nil)? NSLocalizedString(@partie1,@partie1):[defaults stringForKey:@partie1];
}
- (id)init
{
if (self = [super init]) {
inscriptions = [[NSMutableArray alloc] init];
[self createNewNumero];
}
return self;
}
@end
Que pensez-vous de cette oeuvre majeuse ?