Mieux comprendre NSTokenField

colas_colas_ Membre
novembre 2013 modifié dans API AppKit #1

Bonjour !


 


J'ai un problème avec un NSTokenField. Il met un temps fou pour me faire les suggestions pour compléter un texte que je lui donne. Plus précisément :


 


  1. Je tape la lettre "a" dans le TokenField
  2. La méthode textDidBeginEditing: est appelée immédiatement (j'ai sous-classé NSTokenField et mis un NSLog dans cette méthode pour le voir)
  3. Du temps passe (de 1/2 à  1 seconde (voir plus!) )
  4. Ensuite seulement, la méthode tokenField:completionsForSubstring:indexOfToken:indexOfSelectedItem: est appelée et son exécution est immédiate.

J'ai obtenu le listing suivant avec les NSLog.


Je suis moins à  l'aise avec le débugueur. Quand je mets un point d'arrêt sur 2. j'ai des instructions comme 


Réponses

  • CéroceCéroce Membre, Modérateur

    Je suis moins à  l'aise avec le débugueur. Quand je mets un point d'arrêt sur 2. j'ai des instructions comme



    C'est de l'assembleur. C'est ce qui se passe quand tu fais du pas à  pas dans un code dont tu ne possèdes pas les sources (en général, le code d'Apple). Comme le débogueur ne peut pas afficher le source, il "désassemble" le code machine.


     


    L'assembleur est le langage le plus proche de la machine après le code machine. De fait, ses instructions sont très simples: copier des valeurs, tester des flags ou des registres, sauter à  une instruction. À moins de chercher des bugs du compilateur ou faire de la rétro-ingénierie, il n'y a pas d'intérêt à  lire le code.


     


    Personnellement, mon premier réflexe quand le code est lent, est de lancer Instruments et de faire un Time Profile. Tu sauras quelle méthode bouffe du temps, et tu auras alors une piste pour changer de façon de faire.


  • tabliertablier Membre
    novembre 2013 modifié #3

    Ouf, J'ai relu le titre de ce post! Ce n'est pas NSTokienField qui est écrit mais NSTokenField !!


      ???   Il faut dire que je ne voyais pas ce que les Hobbits venaient faire la-dedans.


  • @Céroce


    Merci, j'ai essayé (et je suis pas sûr d'avoir tout compris).


     


    J'ai essayé de faire une exemple minimal.


    Je pense qu'il s'agit d'un bug d'Apple.


    Dans mon souvenir, sous OSX 10.8 ça marchait.


     


    Quelqu'un pour confirmer que ça bugue aussi chez lui ? 


     


    Je joins l'appli minimale (3 lignes de code dans AppDelegate) (qui normalement tourne à  partir de 10.7) et les sources.


     


    Merci !


  • CéroceCéroce Membre, Modérateur
    Je confirme le délai que tu observes.
    À mon avis, tu peux envoyer un Bug Report à  Apple. (Il sera corrigé dans un an).

    (Le délai n'apparaà®t pas dans Instruments, comme si c'était du code qui n'appartient pas à  ton appli qui bloque).
  • Quand j'ai cherché une solution à  ton problème sur SO j'ai trouvé ça :


    http://stackoverflow.com/questions/19810807/nstokenfield-suggestion-is-slowwhat-is-the-process/19835510#19835510


    xd


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