gpt4 book ai didi

ios - 为 NSTextStorage 子类设置 viewController 的布局管理器时字形索引无效

转载 作者:可可西里 更新时间:2023-11-01 03:29:35 25 4
gpt4 key购买 nike

我的目标是使用TextKit对某些词进行斜体、设置文字大小等。

首先,我只是想突出显示我的文本字符串中的一个字符。作为 TextKit 的新手(并且对一般编程来说是真实的),我正在关注 obc.io 问题 #5 的语法高亮主题。

当使用我创建的 UITextView 内置的 NSLayoutManager 时,我的文本出现在屏幕上,没有抛出异常。当我在我的 View Controller 中将 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 的 Text Programming Guide 并且认为我理解了文本系统是如何建立的,但不知道为什么我的字形计数会超过字形的数量......

我为我的 viewController 和 NSTextStorage 子类创建了要点,herehere , 分别。

最佳答案

看起来您的布局管理器尚未从其原始 NSTextStorage 对象中正确删除。在将布局管理器添加到自定义文本存储子类之前调用​​ [self.readerTextView.textStorage removeLayoutManager:self.readerTextView.layoutManager]

一般来说,我发现在将 nib/xib/storyboard 创建的 UITextView 与 TextKit 对象的自定义子类混合使用时,TextKit 表现不佳。您可以通过覆盖 UITextView 上的 - (id)awakeAfterUsingCoder:(NSCoder *)aDecoder 并使用您想要的类构建文本系统来解决其中的一些问题,但通常我建议坚持使用代码内自定义文本系统创建。

关于ios - 为 NSTextStorage 子类设置 viewController 的布局管理器时字形索引无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20318630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com