我有一个由我自己组装的文本系统支持的NSTextView,与Cocoa文档中的文本系统概述中的“手工组装文本系统”部分一样。它成功地在屏幕上显示了NSTextStorage的内容。
但当我输入时,似乎什么都没有发生——屏幕上的文本不会改变。如果我选择文本,则所选内容的形状表示文本已更改。如果我将文本复制并粘贴到TextEdit中,我甚至可以看到我的编辑。如果我输入足够多,我可以让它抛出一个异常:
NSRunStorage, _NSBlockNumberForIndex(): index (5897) beyond array bounds (5881)
天哪,这看起来像是我可以花一天时间调试的东西。怎么回事?
确保将NSTextStorage连接到NSLayoutManager,如下所示:
[textStorage addLayoutManager:layoutManager];
而不是像这样:
[layoutManager setTextStorage:textStorage]; //BAD
关于 -[NSLayoutManager setTextStorage:] 说不应该直接调用它,而应该重写它。显然这就是原因。希望我能帮你省下一个又一个小时毫无结果的工作!
-[NSLayoutManager setTextStorage:]