Exécuter une "méthode privée"

Je suis en train de débuguer de l'affichage.


 


J'ai le souvenir d'avoir employé une méthode



_subtreeDescription

mais là  maintenant, je n'arrive plus du tout à  l'appeler (le compilateur m'en empêche).


 


Y a-t-il un moyen de contourner l'interdiction du compilateur ?


Je ne comprends plus rien !!! Je croyais que Objective-C permettait d'envoyer n'importe quoi à  n'importe qui... mais même si je cherche à  envoyer "_subtreeDescription" à  un (id), ça me bloque !!!


 


Comment fait-on pour forcer l'envoi d'un message ?


Merci !


Réponses

  • Tu la déclare simplement dans ton fichier .h


  • Donc, là , il faudrait que je crée une catégorie sur NSView ?


  • zoczoc Membre
    septembre 2013 modifié #4

    ou sur NSObject, ou dans un protocole


     


    Je suppose que ton projet utilise ARC. Depuis ARC, il est impossible d'appeler une méthode inconnue du compilateur, car il n'est pas en mesure de déterminer les appels de gestion mémoire qu'il doit générer sans connaitre la signature exacte de la méthode.


  • AliGatorAliGator Membre, Modérateur
    septembre 2013 modifié #5

    Le nom de la méthode magique que tu recherches est recursiveDescription


    https://developer.apple.com/library/ios/technotes/tn2239/_index.html#//apple_ref/doc/uid/DTS40010638-CH1-SUBSECTION34


     


    Si je ne dis pas de bêtises, ce n'est pas une méthode privée à  proprement parler, mais une méthode qui est ajoutée au Runtime à  NSView / UIView par la lib de debug (donc elle n'est pas présente dans les .h mais elle n'est pas non dispo dans le framework / la lib UIKit finale, mais plutôt apportée par gdb/lldb et ne marche que quand tu debug l'appli, enfin je crois)


    Pas besoin de faire une catégorie pour ça puisqu'en général tu l'appelles depuis le débogueur gdb / lldb.


  • Merci pour vos réponses !


     


    ---> à  l'époque je n'utilisais pas ARC... Donc, je comprends le comment du pourquoi !!


     


    ---> Quoi !! On peut appeler des méthodes depuis le débogueur !!! Wow !! Je ne savais pas (non, mais allo quoi !).


     


     


    Je m'en suis sorti de mon bug en désactivant le auto-layout de ma vue !


  • samirsamir Membre
    septembre 2013 modifié #7


    ---> Quoi !! On peut appeler des méthodes depuis le débogueur !!! Wow !! Je ne savais pas (non, mais allo quoi !).




    exemple : 



    po [self.view recursiveDescription]
  • AliGatorAliGator Membre, Modérateur
    septembre 2013 modifié #8

    Oui "po" est la commande la plus utilisée du débugueur. C'est en fait un raccourci / alias pour la commande "print-object" (d'où le nom "po").


    Mais y'en a plein d'autres. Voir la doc de LLDB pour plus d'infos.


     


    Voir aussi la doc de Xcode User Guide pour apprendre plein de trucs & astuces utiles : comment mettre un breakpoint qui fait des actions plutôt que (ou en plus de) juste s'arrêter, genre les breakpoints sonores que j'utilise pas mal pour émettre un petit bip dès que je passe dedans sans pour autant arrêter le process, ou les breakpoints qui log un message pour éviter d'avoir à  arrêter l'appli, ajouter un NSLog, recompiler et relancer alors qu'un breakpoint ajouté en live peut faire la même chose, ... bref, je t'invite à  lire ces User Guides & Tech Notes qui donnent toutes ces astuces.


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