Build en Debug : OK - Release : KO
skimpy
Membre
Bonsoir,
J'ai un problème avec le build de mon appli. Quand c'est compilé en mode Debug, ça fonctionne et dès que je passe en mode Release ... ça plante.
Je pense avoir trouvé l'endroit du plantage mais je ne comprends pas : dans mon 1er fichier NIB, la méthode init instancie un objet (dans un 2nd NIB dont le File's Owner est de type NSWindowController) :
myWindow = [[NLController alloc] init];
-> L'allocation de cet objet semble se passer correctement (du moins, c'est ce que me disent les divers NSLog que j'ai mis);
Dans le awakeFromNib du 1er NIB, dès que je fais un [myWindow showWindow:self]; -> ça plante avec un EXC_BAD_ACCESS. J'ai contrôlé la valeur de retour de self dans le init de NLController et il n'est pas à nil. Si je commente cette ligne, l'appli démarre mais bien sûr n'affiche rien.
Est-ce que vous avez une idée ?
Merci.
J'ai un problème avec le build de mon appli. Quand c'est compilé en mode Debug, ça fonctionne et dès que je passe en mode Release ... ça plante.
Je pense avoir trouvé l'endroit du plantage mais je ne comprends pas : dans mon 1er fichier NIB, la méthode init instancie un objet (dans un 2nd NIB dont le File's Owner est de type NSWindowController) :
myWindow = [[NLController alloc] init];
-> L'allocation de cet objet semble se passer correctement (du moins, c'est ce que me disent les divers NSLog que j'ai mis);
Dans le awakeFromNib du 1er NIB, dès que je fais un [myWindow showWindow:self]; -> ça plante avec un EXC_BAD_ACCESS. J'ai contrôlé la valeur de retour de self dans le init de NLController et il n'est pas à nil. Si je commente cette ligne, l'appli démarre mais bien sûr n'affiche rien.
Est-ce que vous avez une idée ?
Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Par contre, je viens de m'apercevoir d'un truc qui est la cause de mon problème : dans mon init du NSWindowController, j'instancie un autre objet (de la classe Toto). Le init de la classe Toto est composé de la façon suivante :
Quand je lui demande de m'afficher l'adresse de dico1 par exemple ... y'a rien ! et donc la suite de mon programme plante parce que ça s'appuie sur les données contenues dans cet objet là !
[EDIT] : Il passe bien dans la condition if
[EDIT 2] : j'ai modifié le dico1 = [[NSMutableDictionary alloc] init]; par dico1 = [[NSMutableDictionary dictionary] retain]; et ça ne fait rien de plus. J'ai toujours en résultat :
- Toto - init - Fin initialisation des variables dico1 ={}
C'est tout à fait normal, ce résultat indique que ton dico est vide et bien initialisé. Comment remplis tu tes conteneurs ensuite ?
Mon autre piste se tourne vers une outlineView que j'ai. Dès que je lui affecte un NSMutableArray et que je fais un reloadData derrière, ça plante. Pourtant en Build Debug ça passe ...
J'ai mis en capture d'écran l'erreur où ça plante.
[EDIT] : Bon il passe dans la méthode - (id) outlineView:(NSOutlineView *)ov objectValueForTableColumn:(NSTableColumn *)tableColumn byItem:(id)item et boom, c'est là qu'apparaà®t GDB avec la capture jointe.
La fonction se contente simplement de faire :
[Fichier joint supprimé par l'administrateur]
[EDIT] Ha ben t'as édité...donc il y a bien un problème dans tes datasources. Comment sont implémentées les autres ?
item est un objet qui est constitué d'un dictionnaire data et d'un tableau child. Le dictionnaire data contient plusieurs clés (6 au total) qui font référence à l'identifier déclaré dans IB pour mon outlineview.
[tt]
- (int)outlineView:(NSOutlineView *)ov numberOfChildrenOfItem:(id)item
{
NSLog(@outlineView:(NSOutlineView *)ov numberOfChildrenOfItem:(id)item);
if(item == nil)
return [rootNode count];
else
  return [item childCount];
}
[/tt]
Quoique ça doit marcher sans...
Non, le else ne change rien. C'est dès que je rajoute cette 2ème colonne dans ma outlineView que ça plante (ou que je clique dedans) ... et pourtant l'identifiant de colonne est bien défini.
Et si tu nous montrais le crash log ? ça aide vachement à comprendre où ça plante !
+
Chacha
Je viens de trouver à l'instant mon erreur : ça venait d'un delegate que j'avais implémenté et d'un release qui était positionné n'importe où !
Voilà le delegate :
-(void)outlineView: (NSOutlineView *)ov willDisplayCell: (NSCell *)cell forTableColumn: (NSTableColumn *)tableColumn item: (id)item
-> Je faisais un release à l'extérieur d'une condition if dans laquelle j'initialisais une variable avec un init.
Maintenant, ça fonctionne ! Et même avec 2 colonnes !
Merci pour votre aide.