Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
以Cocoa格式显示日志记录输出_Cocoa_Pyobjc - Fatal编程技术网

以Cocoa格式显示日志记录输出

以Cocoa格式显示日志记录输出,cocoa,pyobjc,Cocoa,Pyobjc,使用Cocoa组件显示不断更新的日志输出的最佳方式是什么?输出是基于行的,由应用程序生成。追加行应该很快,视图应该自动滚动到底部。总而言之,它应该可以工作,并且看起来像终端中的基本标准 我的代码是用Python编写的,使用PyObjC桥。我正在寻找我可以适应的方法/示例,欢迎使用Objective-C代码。似乎有两种选择:(1)使用NSTableView和(2)使用NSTextView。Console.app似乎使用了NSTableView,但NSTextView的代码可能更少 对于(1),我将

使用Cocoa组件显示不断更新的日志输出的最佳方式是什么?输出是基于行的,由应用程序生成。追加行应该很快,视图应该自动滚动到底部。总而言之,它应该可以工作,并且看起来像终端中的基本标准


我的代码是用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];

}