Les modifications apportées à l'écran NSTextView ne pas atteindre
-
10-10-2019 - |
Question
J'ai un NSTextView soutenu par un système de texte que je mets ensemble moi-même, le long des lignes de la section « Montage du texte système en main » dans le texte Présentation du système dans la documentation Cocoa. Il affiche avec succès le contenu du NSTextStorage à l'écran.
Mais quand je tape dedans, rien ne se passe-texte à l'écran ne change pas. Si je sélectionne le texte, la forme de la sélection suggère que le texte a changé. Si je copier et coller le texte dans TextEdit, je peux même voir mes modifications. Et si je tape assez, je peux l'obtenir pour lancer une exception:
NSRunStorage, _NSBlockNumberForIndex(): index (5897) beyond array bounds (5881)
Golly, cela ressemble le genre de chose que je pouvais passer la meilleure partie d'un débogage jour. Qu'est-ce qui se passe ici?
La solution
Assurez-vous que vous avez connecté le NSTextStorage au NSLayoutManager comme ceci:
[textStorage addLayoutManager:layoutManager];
Au lieu de comme ceci:
[layoutManager setTextStorage:textStorage]; //BAD
La documentation sur -[NSLayoutManager setTextStorage:]
dit qu'il ne devrait jamais être appelé directement, seulement surchargée. Apparemment, c'est la raison. Si tout va bien je vous gagner des heures et des heures de travail sans résultat!