NSTextStorage轻松/后台属性更改

时间:2016-07-23 14:41:50

标签: swift nstextview nslayoutmanager nstextstorage

我正在使用相对较小的文本编辑器完成一个不错的应用程序。在语法高亮的实现过程中,我发现自己需要更改已识别标记的前景色属性。我注意到有一个NSTextStorage的属性:

var fixesAttributesLazily: Bool { get }

关于它的文档是:

  

一个布尔值,指示文本存储对象是否懒惰地修复属性。 (只读)

     

讨论

     

子类化时,此属性的默认值为NO,表示您的子类在更改时立即修复属性。系统的具体子类重写此属性并将其设置为YES。

我真的不知道如何解释这个......但这就是我所做的:

  1. 我在textStorage(textStorage: NSTextStorage, didProcessEditing editedMask: NSTextStorageEditActions, range editedRange: NSRange, changeInLength delta: Int)(这是NSTextStorage的委托方法)中更改了已识别标记的属性。在这里,我正在检查这个属性的值 - 它是假的。
  2. 我完全按照Apple建议(https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/TextStorageLayer/Tasks/Subclassing.html)继承了NSTextStorage并覆盖了该属性。文本视图开始表现得很奇怪。实际上使用小文本它执行正常,但是一旦我打开一个4 MB的文件 - 它就会挂起......好吧......糟糕的事情开始发生在我的mac上。实际上,此行为不依赖于fixesAttributesLazily属性的值。也许我对NSTextStorage的实现很糟糕,或者至少不复杂。
  3. 任何在背景或懒惰中应用属性的技巧或......类似的东西都是受欢迎的。

    另外:我知道有很多方法可以优化突出显示的语法。它可以部分突出显示,使用某种逻辑,基于更改的范围...等。我正在寻找的是一种在后台处理属性更改的方法。例如,当我将4 Mbyte文件粘贴到文本视图时,它首先突出显示它(需要2-3秒),然后将其可视化。我正在寻找的效果是立即出现的文字 - 颜色。

    我正在研究的项目是用Swift编写的。

    感谢大家提前寻求帮助。您可以通过ivailon在gmail dot com与我联系以获取具体信息,因为我不想在此公开应用程序...至少现在还没有; - )

0 个答案:

没有答案