Comment organiser les objets et l'interface graphique
wisky
Membre
Bonjour à tous,
J'ai un petit problème à vous soumettre. Avant de me lancer à corps perdu dans la programmation d'un gros projet, j'aimerai savoir comment faire ceci:
mon appli dispose d'une fenêtre centrale avec une liste de projet ouvert. A côté de cette liste les différent élément du projet s'affiche.
Un projet comporte plusieurs sous objet qu'il est le seul à utiliser. Chacun de ces objet à besoin d'une interface graphique (élaborer sous IB).
Ce que je veut, c'est pouvoir ouvrir plusieurs fenêtres de gestion de projet avec plusieurs projets dedans. comment le faire, je par sur une appli document-based?
Et autre question, comment faire pour spécifier à un objet (obj-c) le chargement de son interface graphique avec lequel il est lié?
Et comment ça ce gère en mémoire? il y a autant d'interface graphique chargé que d'objet?
J'ai un petit problème à vous soumettre. Avant de me lancer à corps perdu dans la programmation d'un gros projet, j'aimerai savoir comment faire ceci:
mon appli dispose d'une fenêtre centrale avec une liste de projet ouvert. A côté de cette liste les différent élément du projet s'affiche.
Un projet comporte plusieurs sous objet qu'il est le seul à utiliser. Chacun de ces objet à besoin d'une interface graphique (élaborer sous IB).
Ce que je veut, c'est pouvoir ouvrir plusieurs fenêtres de gestion de projet avec plusieurs projets dedans. comment le faire, je par sur une appli document-based?
Et autre question, comment faire pour spécifier à un objet (obj-c) le chargement de son interface graphique avec lequel il est lié?
Et comment ça ce gère en mémoire? il y a autant d'interface graphique chargé que d'objet?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Cela donne : App : Controlleur Fenêtre : Controleur Projet : Controlleur Module
Le problème vient que mes objects "controlleur fenêtre" sont stocker dans un NSMutableArray et que je le parcours pour différente raison. Tout plante quand un objet Controlleur Fenêtre est détruit et que je reparcour le tableau car il y a un vide à l'emplacement de l'objet détruit.
Ainsi au moment où tu ajoutes ton contrôlleur à ton NSMutableArray, il est retenu par ce dernier. Tu peux alors le "relâcher" dans ton programme principal puisque le mutableArray garde une "laisse" dessus pour le retenir.
Et quand tu supprimes un élément du NSMutableArray, ça ne laisse jamais de "place vide" :
Pour palier à ça tu peux par exemple mettre de côté dans un mutablearray temporaire les éléments à supprimer, ainsi tu mémorise ceux qu'ils faudra supprimer, et à la fin de ton énumération, tu effectues la procédure de suppression des éléments mémorisés, mais pas pendant le parcours.
J'ai réglé le problème en demandant à l'objet parent de supprimer l'objet en cours de destruction. Le problème ne se pose plus maintenant. Mes objets communique entre eux dans les deux sens.
Oui du coup en effet il faut que, si tu prévois de détruire ton contrôlleur, que tu en informes ton tableau, c'est le mieux.
Ceci dit c'est pas normal que ça fasse ça : je veux dire normalement si ton contrôlleur est utilisé à la fois par ta fenêtre et dans ton MutableArray, chacun de ces 2 trucs ont dû mettre un retain sur ton contrôlleur : à la fois ton mutablearray et ta fenêtre devraient retenir ton contrôlleur.
Du coup quand ta fenêtre se ferme, le contrôlleur ne devrait pas ête détruit, mais juste recevoir un release de la part de la fenêtre. son retainCount redescendrait à 1, car il serait toujours retenu par le mutableArray. Certes ton contrôlleur risque de ne plus te servir à grand chose en effet, si la fenêtre associée est fermée, mais en tout cas le pointeur du contrôlleur est toujours valide dans le MutableArray.
Donc à mon avis c'est pas ton pointeur vers ton contrôlleur qui était invalide, c'est que ce dernier faisait appel à ta fenêtre par exemple, et elle par contre était détruite donc son pointeur dans le contrôlleur invalide.
Ca ne change pas l'idée qu'il faut que tu informes ton mutableArray en effet quand la fenêtre est détruite, tel que tu l'as fait, mais l'explication est donc autre part.
Ou alors tu as fait un release de trop.
enfin bon c'est pas superbement fait...
Ca marche et je comprend ma démarche alors qu'avec le document based je comprend rien... (enfin presque) :P