Init ou pas init
gifa
Membre
Bonjour tout le monde!
Je réalise un projet en objective_C, le déroulement du programme passe par
initWithFrame d' un NSView
awakeFromNib du controleur
setControleur du NSView
Ensuite j'ai rajouter une fenêtre avec un NSTableView qui est appelé par le menu
J'utilise les Bindings pour gérer le NSTableView
lien du NSArrayController au NSObjectController bind to : NSObjectController
  Controller Key : selection
 Model Key Path : resultatsJeu
Dans le controleur j'avais ajouté dans le awakeFromNib l'initialisation du contenu du NSTableView
ainsi que l'accesseur suivant ( accesseur est il le bon mot dans ce cas ? )
- (NSMutableArray *) resultatsJeu { return enregistrements; }
le déroulement du programme devient
initWithFrame d' un NSView
resultatsJeu du controleur
awakeFromNib du controleur
setControleur  du NSView
et lorsque j'appelle ma fenêtre le NSTableView est vide !
Pour avoir un affichage correct du NSTableView j'ai rajouter un init au controleur pour l'initialisation du contenu du NSTableView et le déroulement du programme devient
init du controleur
initWithFrame d' un NSView
resultatsJeu du controleur
awakeFromNib du controleur
setControleur  du NSViewÂ
Est il normal de mettre un init et un awakeFromNib dans le controleur ?
Ou tout mettre dans le init ?, ou bien j'ai tout faut ?
Je réalise un projet en objective_C, le déroulement du programme passe par
initWithFrame d' un NSView
awakeFromNib du controleur
setControleur du NSView
Ensuite j'ai rajouter une fenêtre avec un NSTableView qui est appelé par le menu
J'utilise les Bindings pour gérer le NSTableView
lien du NSArrayController au NSObjectController bind to : NSObjectController
  Controller Key : selection
 Model Key Path : resultatsJeu
Dans le controleur j'avais ajouté dans le awakeFromNib l'initialisation du contenu du NSTableView
ainsi que l'accesseur suivant ( accesseur est il le bon mot dans ce cas ? )
- (NSMutableArray *) resultatsJeu { return enregistrements; }
le déroulement du programme devient
initWithFrame d' un NSView
resultatsJeu du controleur
awakeFromNib du controleur
setControleur  du NSView
et lorsque j'appelle ma fenêtre le NSTableView est vide !
Pour avoir un affichage correct du NSTableView j'ai rajouter un init au controleur pour l'initialisation du contenu du NSTableView et le déroulement du programme devient
init du controleur
initWithFrame d' un NSView
resultatsJeu du controleur
awakeFromNib du controleur
setControleur  du NSViewÂ
Est il normal de mettre un init et un awakeFromNib dans le controleur ?
Ou tout mettre dans le init ?, ou bien j'ai tout faut ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Par contre je pense que tu te trompe dans l'usage des bindings :
Tu dois faire NSTableView bind to NSArrayController.
Ensuite tu dois creer une classe ResultatJeu qui aura les valeurs (key) points et niveau par exemple (il ne faut pas oublier les accesseurs). Dans les attributs de NSArrayController, tu definis le Object Class Name comme ResultatJeu, puis tu entre les deux "key".
Dans le Controlleur, tu declares la méthode updateTable et ecrit la methode qui te permet d'ajouter les objets a ton NSArrayController.
Suis-je clair (pas sur) ?
Si tu veux un exemple n'hésite pas.
Je ne croit pas me tromper en utilisant les bindings
Je n'ai besoins que de 2 choses => afficher des résultats qui sont dans un NSMutableArray
avec les avantages associés à une NSTableView
( affichage en temps réel, tri ... )
=> Récupérer un numéro de jeu dans le NSTableView
Avec les bindings je n'ai écrit que la ligne de code
- (NSMutableArray *) resultatsJeu { return enregistrements; }
J'ai un peu de mal à suivre exactement ton système:
- tu parles de controller sans que je sois certain à chaque fois qu'il s'agisse d'un binding-contrôlleur ou du contrôleur de ton appli et du document ou ....
- Au niveau du contrôleur de binding (BdCtrl), ou plutôt des BdCtrls: il semble que tu t'appuis sur le couple NSArray-CTRL + NSObject-CTRL permettant le lien (depuis IB) entre la table View et le contrôleurGénéral ? C'est à dire que tous les 3 sont instanciés dans le nib, c'est ça ?
Alors tu n'as besoin que du awakeFromNib pour tout paramétrer au niveau des bindings. En ajoutant toutefois un [ArrayCtrl rearrangeObject] en fin de paramétrage pour forcer la prise en compte des valeurs que tu as probablement initialisées en shuntant les accesseurs et surtout avant que le KVO soit pleinement opérationnel (dans le init le KVO n'est pas du tout opérationnel par exemple)
Là par contre, pour tes accesseurs j'ai de sérieux doutes:
Si ton array s'appelle enregistrements, l'accesseur getter doit s'appeler enregistrements et non pas resultatsJeu.
De même il serait utile d'ajouter un accesseur de type setter ( setEnregistrements ou setResultatsJeu) puisque ton array est mutable.
Pour les autres accesseurs (accès aux éléments du jeu de résultat) tu peux en effet laisser les bindings causer directement avec les accesseurs du mutableArray que tu lui fourni.
OUI
Mon array s'appelle resultatsJeu ( je l'appeler auparavant NSMutableArray )
Le NSMutableArray s'appelle enregistrements, il est initialisé par la lecture sur fichier
Lorsque j'initialise le NSMutableArray par init il y a bien la communication avec la tableView .Toutes les modifications faites lors du déroulement du programme sont bien transmissent a la tableView
Si j'initialise le NSMutableArray par awakeFromNib aucune communication
- (NSArray *) resultatsJeu { return enregistrements; }
Si je remplace resultatsJeu par enregistrements cela ne change rien
Y compris l'ajout/supression de lignes ?
Quand tu dis que tu initialise tu veux dire le remplir de tes valeur de dépard ? As-tu-bien ajouté ça après ta manip sur le mutable array ?
(Sans oublier, comme je l'avais fait, le s à Objects)
D'une façon générale le bindings ne nécessitent pas d'intervention au niveau du init.
OUI par la modification du NSMutableArray *enregistrements
Chargement du NSMutableArray *enregistrements a partir d'un fichier
Je n'arrive pas a faire communiquer le NSMutableArray avec la tableView car le
- (NSArray *) resultatsJeu { return enregistrements; }
est toujours exécuter avant le awakeFromNib
[Fichier joint supprimé par l'administrateur]