Füllen von NSTableview aus einem veränderbaren Array

7

Ich habe das seit zwei Tagen versucht und stoße ständig in Sackgassen.

Ich habe Aaron Hillegass Cocoa Programming für MAC OS X durchlaufen und alle relevanten Übungen zu NSTableview und veränderbaren Arrays gemacht, und ich habe versucht, sie an meine Bedürfnisse anzupassen.

Jedoch scheint keiner von ihnen ein Array mit Objekten als Datenquelle zu verwenden, sondern scheint die Tabellenansicht als Datenquelle zu verwenden.

Ich versuche Jonas Jongejans " Nachbearbeitung" meines Codes zu implementieren hier , mit einem Cocoa-Frontend, um die Ergebnisse anzuzeigen.

Irgendwelche Hinweise oder Vorschläge, die ich kenne, sollten einfach sein, aber ich bin hier in der Wildnis verloren.

Ich kann die Tabelle füllen, indem ich das Array

setze     
S1syphus 03.08.2010, 15:15
quelle

4 Antworten

14

Es ist wirklich ziemlich einfach, wenn du es erst einmal verstanden hast (natürlich!). Sie können ein NSArray nicht direkt als Tabellenquelle verwenden. Sie müssen entweder ein benutzerdefiniertes Objekt erstellen, das NSTableViewDataSource oder implementieren Sie dieses Protokoll in einer vorhandenen Klasse - in der Regel ein Controller. Wenn Sie Xcode verwenden, um eine standardbasierte dokumentbasierte Anwendung zu erstellen, ist die Klasse des Dokumentencontrollers (MyDocument genannt) eine gute zu verwendende Klasse.

Sie müssen mindestens diese beiden Methoden implementieren:

%Vor%

Wenn Sie ein veränderbares Array haben, dessen Werte Sie in einer Tabellenansicht mit einer Spalte verwenden möchten, sollten Sie etwas wie folgt machen:

%Vor%

Es ist mir gerade eingefallen, dass Sie die oben genannten zwei Methoden als Kategorie zu NSArray hinzufügen können, indem Sie myMutableArray durch self ersetzen und dann ein Array als Datenquelle verwenden können.

Wie auch immer, mit einem veränderbaren Array ist es wichtig, dass Sie jedes Mal, wenn Sie es ändern, der Tabellenansicht mitteilen müssen, dass es geändert wurde. Daher müssen Sie die Tabellenansicht -reloadData senden.

Wenn Ihre Tabellenansicht mehr als eine Spalte enthält und Sie sie mit Eigenschaften von Objekten in Ihrem Array auffüllen möchten, können Sie einen Trick machen, um es für Sie einfacher zu machen. Angenommen, die Objekte in Ihrem Array sind Instanzen einer Klasse namens Person mit zwei definierten Methoden:

%Vor%

und Sie möchten, dass Ihre Tabellenansicht für jede eine Spalte enthält, können Sie die identifier -Eigenschaft jeder Spalte auf den Namen der Eigenschaft in Person setzen, die in dieser Spalte angezeigt wird und etwa Folgendes verwendet:

%Vor%

Wenn Sie valueForKey: durch valueForKeyPath: ersetzen und Ihre Person-Klasse auch die folgenden Methoden hat:

%Vor%

Sie können Tabellenspalten mit Bezeichnern wie father.fullName oder mother.familyName hinzufügen und die Werte werden automatisch ausgefüllt.

    
JeremyP 03.08.2010, 16:05
quelle
3

Sie könnten die Route der Datenquelle wählen und alle schweren Arbeiten selbst durchführen, oder Sie könnten die Schwerlastarbeiten für Sie durchführen lassen. Fügen Sie der NIB-Datei, die die Tabellenansicht enthält, ein NSArrayController hinzu. Stellen Sie sicher, dass der Eigentümer der Datei der Datei auf dieselbe Klasse eingestellt ist, in der sich das veränderbare Array befindet. Binden Sie den contentArray des Array-Controllers an File's Owner.myMutableArray . Für jede Spalte binden Sie Value an den Array-Controller arrangedObjects und fügen Sie den entsprechenden Schlüsselpfad hinzu. Dies ermöglicht es Ihnen, Dinge wie Benutzersortierung kostenlos zu bekommen, wenn Sie es jemals brauchen.

    
theMikeSwan 04.08.2010 20:34
quelle
1

Auf dem iPhone (ich weiß, dass Sie über Mac sprechen, aber vielleicht könnte das helfen) müssen Sie Delegierung zum Laden eines TableView verwenden. Es fragt nach einer Zelle und Sie verwenden Ihr Array, um die Daten an den benötigten Stellen auszufüllen. Ich bin mir nicht sicher, ob das für den Mac funktioniert, aber es lohnt sich, einen Blick darauf zu werfen.

Vielleicht setzen Sie dataSource auf self und verwenden Sie diese Delegate-Methoden, um auf Ihr Array basierend auf der Zeile und Spalte #

zuzugreifen     
RSully 03.08.2010 15:19
quelle
1

Apple hat eine ganze Anleitung für die Tabellenansicht-Programmierung, also schlage ich vor, dass Sie mit der Verwenden einer Tabelle Datenquelle Abschnitt des Leitfadens.

    
willcodejavaforfood 03.08.2010 15:18
quelle

Tags und Links