(1) NSTableView を使用する方法と (2) NSTextView を使用する方法の 2 つのオプションがあるようです。Console.app は NSTableView を使用しているように見えますが、NSTextView はおそらく少ないコードです。
(1) の場合、(メモリまたはディスクから) の適切な行tableView_objectValueForTableColumn_rowIndex_
と のログ行の総数を返す NSTableDataSource を作成しますnumberOfRowsInTableView_
。このデータ ソースを NSTableView の dataSource として設定します。新しいログ行が入ったときに、データを再表示するために呼び出す必要がある場合がありtableView.reloadData()
ます。テーブル ビューが NSScrollView に埋め込まれていると仮定すると (Interface Builder でテーブル ビューを作成する場合のデフォルト)、このメソッドを使用して一番下までスクロールできます。 Apple Scroll View プログラミング ガイド (簡単に Python に翻訳できます)
- (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];
}
明らかに、このコードは、スクロール ビューへの IBOutlet があることを前提としています。
(2)の場合、テキストビューの最後に行を追加できます(最後にtextView.textStorage().appendString_(new_log + '\n')
まだ改行がない場合)。呼び出して、囲んでいるスクロール ビューを強制的に最後までスクロールすることができます (indirectoy)。textView.setSelectedRange_(NSMakeRange(textView.textStorage().length(),0))