NSTextView、NSTextStorage 和循环日志



我在应用程序窗口中有一个NSTextView,它显示了串行端口传入数据的日志。当日志到达应用程序时,我将文本附加到日志中:

NSAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString: text];
NSTextStorage *textStorage = [SerialOutput textStorage];
[textStorage beginEditing];
[textStorage appendAttributedString:attrString];
[textStorage endEditing];

例如,我想将文本限制为 1000 行,以免折叠应用程序,因为它将无限期运行。

现在我有一个临时解决方案,基于 NSTimer 每周清除日志并且它有效,但我更喜欢实现一种聪明的方法,只是限制文本大小并创建一个循环日志。

知道吗?也许使用方法插入属性字符串?

问候琼

最后我找到了方法,当我将文本附加到 NSTextStorage 时,我只需控制长度是否超过阈值,并清理日志开头的一些空间:

// updates the textarea for incoming text by appending text
- (void)appendToIncomingText: (id) text {
  // add the text to the textarea
  NSAttributedString* attrString = [[NSMutableAttributedString alloc] initWithString: text];
  NSTextStorage *textStorage = [SerialOutput textStorage];
  [textStorage beginEditing];
  [textStorage appendAttributedString:attrString];
      //Max. size of TextArea: LOG_SIZE characters
      if ([textStorage length] > LOG_SIZE){
          [textStorage deleteCharactersInRange:NSMakeRange(0, [attrString length])];
      }
  [textStorage endEditing];
  // scroll to the bottom
  NSRange myRange;
  myRange.length = 1;
  myRange.location = [textStorage length];
  NS[SerialOutput scrollRangeToVisible:myRange];
}

正如我所希望的那样,它可以用作循环日志。

相关内容

  • 没有找到相关文章

最新更新