Bug zarbi >_<

juin 2007 modifié dans Vos applications #1
Salut,

J'ai un bug bizarre. Je ne sais pas si c'est due à  ma tableView, toujours est-il que celle-ci comporte, pour chaque ligne, une view (qui est correctement initializée car c'est pas la première fois que je fais ça et j'ai jms eu de problème).
Lorsque je clique sur ajouter, ma fenêtre effectue un CGSFlip (à  la widget) et on arrive sur un panneau d'ajout où l'on doit compléter des informations. Lorsque que click sur un checkbox, n'importe lequel, des fois tout vas bien, mais des fois l'application plante et j'obtiens ça dans la fenêtre debugger :
<br />objc_msgSend<br />mov 0(%eax),%esi<br />


Le truc c'est que aucune action n'est relié ! Tous les checkbox sont juste présents dans l'interface mais en aucun cas agissent sur le code  :crackboom:-

Je vous joint une vidéo qui vous montre. Je clique je ne sais combien de fois sur les checkbox et au bout d'un moment, PAF ! Mais des fois ça peut arriver dès le premier clique.

http://www.eagle-of-liberty.com/goodtiming/bugV.mp4 (MP4 - 736Ko)

Réponses

  • schlumschlum Membre
    08:13 modifié #2
    Le lien ne fonctionne pas... [Edit] ah si, ça y est..

    Je ne vois pas le rapport entre TableView et une view par ligne...
    Il me semblait qu'une TableView était constituée d'une Cell par colonne  :)
  • 08:13 modifié #3
    Oui mais en fait je met une NSView ds chaque ligne pour m'éviter pas mal de code  :adios!:
    Mais apparemment le pb ne vient pas de là , car même en supprimant la tableView de mon projet et de mon interface, j'ai tjrs le bug !
  • schlumschlum Membre
    08:13 modifié #4
    Qui est la NSView de la ligne 2 de ton crash ?

    Effectivement, ça n'a à  priori rien à  voir avec la TableView
  • Eddy58Eddy58 Membre
    08:13 modifié #5
    Plantage sûrement du à  ta gestion mémoire, vérifie bien la cohérence de tes retain/release. :o
  • 08:13 modifié #6
    Pour les retain/release aucun problème...
    J'utilise une NSBox dans la fenêtre principale.. c'est pas ça le problème par hasard ?
  • 08:13 modifié #7
    J'ai mis des checkbox sur la fenêtre principale, et là  ça semble pas planter du tout...
    Pourtant, lorsque j'effectue une transition, je fais simplement ça :
    <br />[mainBox setContentView:nil];<br />[self animateWindow:window effect:CGSFlip direction:CGSLeft duration:0.5];<br />	<br />&nbsp; &nbsp; NSRect		boxRect, newRect, windowRect;<br /><br />&nbsp; &nbsp; boxRect = [mainBox frame];<br />&nbsp; &nbsp; newRect = [addAlarmView frame];<br />&nbsp; &nbsp; windowRect = [window frame];<br />&nbsp; &nbsp; windowRect.size.height -= ( NSHeight( boxRect ) - NSHeight( newRect ));<br />&nbsp; &nbsp; windowRect.size.width -= ( NSWidth( boxRect ) - NSWidth( newRect ));<br />&nbsp; &nbsp; windowRect.origin.y += ( NSHeight( boxRect ) - NSHeight( newRect ));<br />&nbsp; &nbsp; boxRect.size.height = NSHeight( newRect );<br />&nbsp; &nbsp; boxRect.size.width = NSWidth( newRect );<br />	[mainBox setContentView:nil];<br />	[mainBox setContentView:addAlarmView];<br />	<br />	[window setFrame:windowRect display:YES animate:YES];<br />	[window setMaxSize:windowRect.size];<br />	[window setMinSize:windowRect.size];<br />
    
  • 08:13 modifié #8
    ça semble venir du framework iLifeControls.. Bizarre quand même.. Si je ne remet ma fenêtre en NSWindow plutôt que NFIWindow, j'ai pas de bug :o
  • Eddy58Eddy58 Membre
    08:13 modifié #9
    Peut-être que c'est très mal supporté de mixer AppKit et iLifeControls ? ???
  • 08:13 modifié #10
    Aucune idée  :o
    En tout cas, j'ai opté pour mettre la fenêtre d'ajout en style Sheet, et fenêtre Aqua.
    Là  aucun problème.
    J'ai quand même foutu un ptit Switch ds une autre vue de mon projet, j'ai du cliquer 100 fois dessus, j'ai pas eu de problème. Peut-être qu'il aime pas les objets Aqua en masse ?  :o Enfin c'est très bizarre
  • BruBru Membre
    08:13 modifié #11
    Le peu que je devine dans la vidéo est que le plantage provient lorsque le système tente de redessiner le checkbox après le clic.

    Ce qui plante, c'est un appel d'une méthode cocoa.

    L'objet qui devrait recevoir le message est purgé (théorie d'Eddy), ou alors, le runtime Objective-C est buggé sur un point précis.
    Pour en être sûr il serait intéressant d'examiner les paramètres de la fonction objc_msgSend (il y en a peu) : ils nous renseigneraient sur la méthode qui est tentée d'être appelée, ainsi que sur le pointeur de l'objet destinataire (et dans ce cas, un print-description de gdb dans la console gdb de Xcode permettrait de voir si l'objet est correct).

    .
Connectez-vous ou Inscrivez-vous pour répondre.