[Résolu] NSTextView plantage lors de l'ajout de texte
wisky
Membre
Bonjour à tous,
En ce moment j'ai pas mal de colle pour vous !
En voici une nouvelle :
Lorsque j'ajoute du texte en grande quantité et rapidement dans ma sous classe de NSTextView cela fait planté mon logiciel.
Avant cette erreur, la longueur du texte était de 55960 caractères.
J'ai déjà essayé de ralentir l'ajout des données avec un tampon mais ça n'y fait rien !
Ma question est, comment régler cela ?
En ce moment j'ai pas mal de colle pour vous !
En voici une nouvelle :
Lorsque j'ajoute du texte en grande quantité et rapidement dans ma sous classe de NSTextView cela fait planté mon logiciel.
!!! _NSLayoutTreeSetLineFragmentRectForGlyphRange found invalid glyph index
!!! _NSLayoutTreeSetLocationForGlyphRange invalid glyph range {55960, 5}
Avant cette erreur, la longueur du texte était de 55960 caractères.
J'ai déjà essayé de ralentir l'ajout des données avec un tampon mais ça n'y fait rien !
Ma question est, comment régler cela ?
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Si au lieu d'afficher le texte dans la NSTextView je me contente de stocker les données dans une NSMutableString, ça ne plante pas !
Donc maintenant, comment régler la barre de-défilement pour simuler la présence de tout le texte sans pour autant ajouter tout le texte dans le NSTextView.
Pour infos, j'arrive à des tailles de près de 10Mo de texte dans la NSMutableString. Donc pour des raisons de performance, je préfèrerais gérer moi même l'ascenseur et n'afficher effectivement que le contenue visible. Ainsi les performances seront meilleur (je l'espère).
Bonjour,
Teste avec ca
J'ai un début de piste avec usleep(500) qui ne semble pas fonctionner.
En effet, si je met dans la boucle qui ajouter les données un sleep(1) le plantage ne se fait pas. Même si j'ajoute 1Mo à chaque fois.
Par contre, usleep(500) ne fonctionne pas. La pause de 0.5 seconde n'est pas faite. Ce qui fait au final que le logiciel vas le plus vite possible et comme c'est dans deux thread séparé, ça fini par planter l'affichage.
Y-a-t-il quelque chose que je ne fait pas bien dans l'utilisation de usleep() ?
Assez logique dans la mesure ou le NSLayoutManager n'est pas appelé pour une NSAttributedString tant qu'elle n'est pas affichée !
Peut être que revenir au NonContiguousLayout peut aider ?
C'est plus par curiosité que je proposais ContiguousLayout, et pour tenter d'expliquer pourquoi dans une NSMutableAttributedString "ça plante pas"
Peut être qu'Apple serait intéressé à connaà®tre le Bug ?
En fait, ça plantait à cause du fait que je tentait d'ajouter des données alors que le système n'avais pas fini de rafraichir la vue. Du coup il se perdait un peux dans ses objets ça crashait.
Au final, je vais voir si je peux pas encore gagner en performance. C'est toujours ça de pris
J'aimerais respecter un certain débit pour la réception et l'envoie, comment calculer le temps d'attente entre chaque paquet de donnée pour atteindre le débit max ?
Ex: vitesse 12,9Kb/s combien entre chaque caractères ? 1/12900 ?