ReloadData

chaps31chaps31 Membre
17:55 modifié dans API AppKit #1
Y a-t'il des précautions à  prendre avec reloadData ? Parce-que après modif d'un NSTextField par l'utilisateur je modifie la table source de ma tableView et fait un reloadData, sauf qu'à  ce stade si l'utilisateur clique sur la tableView BUG, plantage de l'appli (cliquer sur la tableview lance une IBAction mais qui fonctionne sans problème normalement).
En sachant que la modification de la table est  bien effective.
A moins que cela vienne de mon RemoveAllObjects qui commence la méthode de remplissage de la table source ? Mais j'en doute.

Merci de me dire si vous voyez une énorme maladresse  :o

Réponses

  • schlumschlum Membre
    17:55 modifié #2
    Lance en mode debug, et regarde la pile au moment du crash.
  • chaps31chaps31 Membre
    17:55 modifié #3
    La pile ?  ???  Lorsque le debugger se lance tout ce que j'ai c'est des trucs incompréhensible dans la fenêtre du bas (de l'hexadécimal puis lwzx r2,r9,r0... hum..), par contre je viens de voir qu'uen cliquant ailleurs après la modif j'ai le même plantage, j'ai l'impression que le plantage vient de la desselection du NSTextField (idem avec tab)
  • schlumschlum Membre
    17:55 modifié #4
    dans 1206980023:

    La pile ?   ???  Lorsque le debugger se lance tout ce que j'ai c'est des trucs incompréhensible dans la fenêtre du bas (de l'hexadécimal puis lwzx r2,r9,r0... hum..), par contre je viens de voir qu'uen cliquant ailleurs après la modif j'ai le même plantage, j'ai l'impression que le plantage vient de la desselection du NSTextField (idem avec tab)


    La pile c'est pas la fenêtre du bas... C'est la succession d'appels jusqu'au crash (en haut à  gauche).
  • Philippe49Philippe49 Membre
    17:55 modifié #5
    dans 1206979095:

    A moins que cela vienne de mon RemoveAllObjects qui commence la méthode de remplissage de la table source ? Mais j'en doute.


    removeAllObjects envoie un release à  chaque élément de la NSArray.
    Si ces éléments sont à  un retain count de 1, ils sont désalloués, d'où un crash si on essaie de les réutiliser.
  • chaps31chaps31 Membre
    17:55 modifié #6
    J'ai viré mon removeallobject et testé mais même plantage, le message du debugger en "0": objc_msgSend_rtp
  • Philippe49Philippe49 Membre
    17:55 modifié #7
    Dans les méthodes dealloc de tes classes, tu peux mettre un message
    -(void) dealloc{
      NSLog(@Deallocing %@",self);
      ....
      [super dealloc];
    }

    tu verras peut-être disparaà®tre un objet que tu crois alloué
  • chaps31chaps31 Membre
    17:55 modifié #8
    pourquoi "super"?
  • chaps31chaps31 Membre
    17:55 modifié #9
    Problème résolu, merci, j'en profite pour une autre question, lorsque je fais un alloc il faut obligatoirement faire un dealloc après ?
    Désolé de mon niveau en POO :-\\
  • schlumschlum Membre
    17:55 modifié #10
    dans 1207048553:

    Problème résolu, merci, j'en profite pour une autre question, lorsque je fais un alloc il faut obligatoirement faire un dealloc après ?
    Désolé de mon niveau en POO :-\\


    "dealloc" n'est JAMAIS appelé explicitement.
  • Philippe49Philippe49 Membre
    17:55 modifié #11
    dans 1207046651:

    pourquoi "super"?


    La classe dont ta classe hérite implémente déjà  une méthode dealloc.
    Pour que tout soit nettoyé, il faut l'appeler pour désallouer les variables non déclarées dans ta sous-classe, mais existant peut-être en tant que classe fille.

    Le mot clé super  fait que c'est la méthode de la classe parent qui est appelée.
  • AntilogAntilog Membre
    17:55 modifié #12
    dans 1207048553:

    Problème résolu, merci, j'en profite pour une autre question, lorsque je fais un alloc il faut obligatoirement faire un dealloc après ?
    Désolé de mon niveau en POO :-\\


    http://www.stepwise.com/Articles/Technical/HoldMe.html
    http://www.stepwise.com/Articles/Technical/2001-03-11.01.html
  • chaps31chaps31 Membre
    17:55 modifié #13
    Merci ;)
Connectez-vous ou Inscrivez-vous pour répondre.