Моя цель - использовать TextKit для наложения курсора, установки размера текста и т. Д. Определенных слов.Недопустимый индекс глифа при установке viewMontroller layoutManager для подкласса NSTextStorage
Чтобы начать, я пытаюсь выделить символ в текстовой строке. Будучи новичком в TextKit (и правдиво для программирования в целом), я следую теме подсветки синтаксиса проблемы obc.io №5.
При использовании NSLayoutManager, встроенного в созданный мной UITextView, мой текст появляется на экране без каких-либо исключений. Когда я устанавливаю UITextView в качестве менеджера макета моего подкласса NSTextStorage в моем контроллере представления (ниже), я получаю ошибки для исключения для недопустимых индексов глифов.
_textStorage = [BBRSyntaxHighlightTextStorage new];
[_textStorage addLayoutManager: self.readerTextView.layoutManager];
Выход консоли ниже:
_NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 528
2013-12-01 15:23:24.949 BibleReader[6077:70b] !!! _NSGlyphTreeInvalidateGlyphsForCharacterRange invalid char range 1
2013-12-01 15:23:24.956 BibleReader[6077:70b] !!! _NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 528
2013-12-01 15:23:24.957 BibleReader[6077:70b] !!! _NSGlyphTreeInvalidateGlyphsForCharacterRange invalid char range 1
2013-12-01 15:23:24.957 BibleReader[6077:70b] !!! _NSGlyphTreeInvalidateGlyphsForCharacterRange character count mismatch
2013-12-01 15:23:24.958 BibleReader[6077:70b] !!! _NSLayoutTreeLineFragmentRectForGlyphAtIndex invalid glyph index 4040
2013-12-01 15:23:24.959 BibleReader[6077:70b] !!! _NSGlyphTreeInvalidateGlyphsForCharacterRange invalid char range 1
Я прочитал текст Руководство по программированию много раз Apple, и думаю, что я понимаю, как устанавливается текст системы, но понятия не имею, почему мой граф глиф будет превышают количество символов ...
Я создал gist для моего подкласса подпрограммы и NSTextStorage, here и here, соответственно.
Мне удалось получить эту работу без необходимости переопределять awakeAfterUsingCoder. Удаление layoutManager перед добавлением инициализации подкласса textStorage и добавление layoutManager readerTextView решило мою проблему; текстовое представление отображает текст на экране, используя мой собственный текстовый файл. – jefffreyallen
Вау, 'removeLayoutManager:' сделал трюк для меня. Спасибо огромное! – Stream