我编写了一个 NSTextView 子类,它经常对自身内部的文本进行编程修改(有点像 IDE 的代码格式——例如,自动插入右括号)。
我最初的实现使用了 NSTextView 的insertText:
. 这实际上似乎工作得很好。但是在阅读NSTextView 文档时(我有时会这样做),我在讨论部分注意到insertText:
此方法是插入用户键入的文本的入口点,一般不适合其他用途。最好通过直接对文本存储进行操作来对文本进行编程修改。
哦,我的错,我想。因此,我尽职尽责地将所有 insertText 调用更改为对底层 NSTextStorage ( replaceCharactersInRange:withString:
,主要是) 的调用。这似乎工作正常,直到我注意到它完全搞砸了 Undo(当然,因为 Undo 是由 NSTextView 处理的,而不是 NSTextStorage)。
因此,在我拖出并在我的文本存储中放置一堆撤消代码之前,我想知道我是否可能被朋克,真的insertText:
不是那么糟糕吗?
对,所以我的问题是:NSTextView 的insertText:
调用是否真的“不适合”以编程方式修改 NSTextView 的文本,如果是,为什么?