0

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

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

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

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

任何的想法 ?也许使用方法 insertAttributedString ?

问候,琼

4

1 回答 1

4

最后我找到了方法,当我将文本附加到 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];
}

正如我想要的那样,它可以用作循环日志。

于 2013-02-26T07:06:43.700 回答