【问题标题】:Designing custom NSTextView设计自定义 NSTextView
【发布时间】:2011-10-06 05:31:11
【问题描述】:

我需要设计一个自定义文本视图来显示我的应用程序生成的日志。日志具有特定的打包二进制格式,每个条目除了实际字符串(日志级别、日期、来源)之外还包含许多字段。现在这些日志可以是巨大的,数百兆字节的数据。我需要实现所有基于消息类型/源的快速过滤、搜索、内存布局控制等功能。由于 NSTextView 支持大多数这些功能,我决定从那里开始。

我显然需要我的自定义文本存储来提供对我打包日志格式的访问,以便在用户滚动日志视图窗口时按需加载新字符串。我还需要根据当前的活动过滤器(例如仅显示警告)有选择地显示日志行,而无需再次将整个文本重新加载到视图中,只需在显示行时过滤掉它们。

我查看了 NSTextStorage,它建议重载 -string,这并不完全符合目的。任何人都可以提供一些指导来指导我的进一步研究吗?我对可可的文本处理比较陌生。

【问题讨论】:

    标签: cocoa nstextview


    【解决方案1】:

    不是直接回答您的问题,而是对 Apple 来说足够好的替代方案:

    为什么不像 Console.app 那样使用正确的系统日志呢?每个日志条目(尽管它可能是多行)都以非常特定的格式开头。 Console.app 使用大纲视图(如果该行对于表格行来说太长而无法使所有条目保持相同大小以便于阅读,则该条目有一个子行)。在标准日志下的 /Applications/Utilities/Console.app 中检查它。

    好处:整个条目的简单选择,非常容易的搜索过滤,交替的行颜色使单个条目更容易看到,如果你没有,可以使用可变行高来显示整个消息比如截断/披露方法。

    【讨论】:

    • 这是一个不错的选择,我实际上已经准备好了这个变体,但它并非没有它的怪癖。例如,您不能在此变体中选择和复制任意文本范围。但无论如何,这确实是一个可行的选择。
    • NSTextView 不支持按需加载大文件的一部分。你真的会有很多工作要做。每个基于 NSTextView 的文本编辑器在处理大型(日志大小)文件时都非常慢,我怀疑这正是 Console.app 设计成这样的原因。在您的情况下,主/详细信息设置如何?表中汇总;选择时详细的完整日志消息?
    • 感谢 Joshua,我已经实现了一个基于 NSOutlineView 的日志查看器,它具有灵活的单元格高度。此外,选择确实仅限于单个日志行,此设置允许在“错误”行之间轻松过滤和导航。再次感谢您的提示。
    猜你喜欢
    • 2012-10-06
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 2016-06-13
    • 2021-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多