Кажется, что есть два варианта: (1) использовать NSTableView и (2) использовать NSTextView. Console.app, по-видимому, использует NSTableView, но NSTextView, вероятно, меньше кода.
Для (1) я бы написал NSTableDataSource, который возвращает соответствующую строку (из памяти или с диска) для tableView_objectValueForTableColumn_rowIndex_
и общее количество строк журнала для numberOfRowsInTableView_
. Установите этот источник данных в качестве источника данных для NSTableView. Вам может потребоваться вызвать tableView.reloadData()
, чтобы заново отобразить данные, когда появляется новая строка журнала. Предполагая, что табличное представление встроено в NSScrollView (по умолчанию, если вы создаете табличное представление в Интерфейсном Разработчике), вы можете прокрутить вниз этот метод из Руководства по программированию 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')
(при условии, что в конце еще нет новой строки). Вы можете принудительно прокрутить вид прокрутки до конца (непрямой), вызвав textView.setSelectedRange_(NSMakeRange(textView.textStorage().length(),0))