Frage

Was ist der beste Weg, um mit Cocoa Components ständig aktualisierte Protokollierungsausgaben anzuzeigen?Die Ausgabe erfolgt zeilenbasiert und wird von der Anwendung generiert.Das Anhängen von Zeilen sollte schnell erfolgen und die Ansicht sollte automatisch nach unten scrollen.Alles in allem sollte es funktionieren und in einem Terminal wie ein einfacher Standard aussehen.

Mein Code ist in Python unter Verwendung der PyObjC-Brücke geschrieben.Ich suche nach Ansätzen/Beispielen, die ich anpassen kann, Objective-C-Code ist willkommen.

War es hilfreich?

Lösung

Es scheint, dass es zwei Möglichkeiten gibt:(1) verwenden Sie eine NSTableView und (2) verwenden Sie eine NSTextView.Console.app scheint eine NSTableView zu verwenden, aber eine NSTextView ist wahrscheinlich weniger Code.

Für (1) würde ich eine NSTableDataSource schreiben, die die entsprechende Zeile (entweder aus dem Speicher oder von der Festplatte) zurückgibt tableView_objectValueForTableColumn_rowIndex_ und die Gesamtzahl der Protokollzeilen für numberOfRowsInTableView_.Legen Sie diese Datenquelle als Datenquelle für eine NSTableView fest.Möglicherweise müssen Sie anrufen tableView.reloadData() um die Daten erneut anzuzeigen, wenn eine neue Protokollzeile eingeht.Vorausgesetzt, die Tabellenansicht ist in eine NSScrollView eingebettet (die Standardeinstellung, wenn Sie die Tabellenansicht im Interface Builder erstellen), können Sie mit dieser Methode aus dem Apple Scroll View Programming Guide (einfach in Python übersetzt) ​​nach unten scrollen.

- (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];

} 

Offensichtlich geht dieser Code davon aus, dass Sie über ein IBOutlet zur Bildlaufansicht verfügen.

Für (2) können Sie mit eine Zeile am Ende der Textansicht hinzufügen textView.textStorage().appendString_(new_log + '\n') (vorausgesetzt, am Ende steht noch kein Zeilenumbruch).Sie können die umschließende Scroll-Ansicht durch einen Aufruf dazu zwingen, bis zum Ende zu scrollen (indirekt). textView.setSelectedRange_(NSMakeRange(textView.textStorage().length(),0))

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top