以Cocoa格式显示日志记录输出
使用Cocoa组件显示不断更新的日志输出的最佳方式是什么?输出是基于行的,由应用程序生成。追加行应该很快,视图应该自动滚动到底部。总而言之,它应该可以工作,并且看起来像终端中的基本标准以Cocoa格式显示日志记录输出,cocoa,pyobjc,Cocoa,Pyobjc,使用Cocoa组件显示不断更新的日志输出的最佳方式是什么?输出是基于行的,由应用程序生成。追加行应该很快,视图应该自动滚动到底部。总而言之,它应该可以工作,并且看起来像终端中的基本标准 我的代码是用Python编写的,使用PyObjC桥。我正在寻找我可以适应的方法/示例,欢迎使用Objective-C代码。似乎有两种选择:(1)使用NSTableView和(2)使用NSTextView。Console.app似乎使用了NSTableView,但NSTextView的代码可能更少 对于(1),我将
我的代码是用Python编写的,使用PyObjC桥。我正在寻找我可以适应的方法/示例,欢迎使用Objective-C代码。似乎有两种选择:(1)使用NSTableView和(2)使用NSTextView。Console.app似乎使用了NSTableView,但NSTextView的代码可能更少 对于(1),我将编写一个NSTableDataSource,它返回
tableView\u objectValueForTableColumn\u rowIndex\u
的相应行(从内存或磁盘),以及numberOfRowsInTableView\u
的日志行总数。将此数据源设置为NSTableView的数据源。您可能需要调用tableView.reloadData()
,以便在新的日志行进入时重新显示数据。假设表格视图嵌入到NSScrollView中(如果在Interface Builder中创建表格视图,则默认设置),可以使用Apple scroll view编程指南中的此方法滚动到底部(很容易翻译为Python)
显然,这段代码假设您有一个指向滚动视图的IBOutlet
对于(2),您可以使用
textView.textStorage().appendString(new_log+'\n')
在文本视图的末尾添加一行(假设末尾没有新行)。您可以通过调用textView.setSelectedRange(NSMakeRange(textView.textStorage().length(),0))
强制封闭的滚动视图滚动到末尾(间接),对于选项2,您应该使用textView.textStorage().appendAttributedString(NSAttributedString.alloc().initWithString)(new\u log+u“\n”)
,滚动似乎对我不起作用。此外,在编辑字符串之前和之后,在textStorage()
上调用beginEditing()
和endEditing()
。使用scrollRangeToVisible>而不是setSelectedRange\uu
。请参阅
- (void)scrollToBottom:sender;
{
NSPoint newScrollOrigin;
// assume that the scrollview is an existing variable
if ([[scrollview documentView] isFlipped]) {
newScrollOrigin=NSMakePoint(0.0,NSMaxY([[scrollview documentView] frame])
-NSHeight([[scrollview contentView] bounds]));
} else {
newScrollOrigin=NSMakePoint(0.0,0.0);
}
[[scrollview documentView] scrollPoint:newScrollOrigin];
}