我在应用程序窗口中有一个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];
}
正如我所希望的那样,它可以用作循环日志。