NSTableView mit Daten füllen

martinibook

Aktives Mitglied
Thread Starter
Dabei seit
20.08.2005
Beiträge
8.730
Reaktionspunkte
350
Hallo,

Ich brauche für ein Programm eine 4-spaltige Tabelle. Die Tabelle soll nur Daten anzeigen, die Daten müssen nicht sortiert oder geändert werden können.

Ich habe mal in der Dokumentation geschaut, allerdings werde ich nicht schlau daraus.

Wie kann ich Daten in die Tabelle schreiben?

Martin
 
Core Data ist zwar eine nette Sache, aber ich will einfach nur einige Zeilen nicht als Text sondern als Tabelle dargestellt bekommen.

Ich möchte ein Programm schreiben, das Wachstum simuliert:
Ich habe 100 Kaninchen und nach einem Monat kommen 10 dazu. Jetzt gibt es verschiedene Arten, es könnte also jeden Monat um 10 wachsen oder um 10%. Dann wird gerechnet, 100 Werte und diese dann in einer Tabelle angezeigt, in den Spalten "Zeit" und "Anzahl".

Wie schreibe ich diese Daten in eine Tabelle rein?

Martin
 
Wenn Du Bindings (das hat ja erstmal nichts mit CoreData zu tun) nicht verwenden willst - es ist eigentlich ganz einfach - dann muss Du eine TableView Data Source zur Verfügung stellen:

http://developer.apple.com/document...View/index.html#//apple_ref/doc/uid/10000026i

Aber es wäre bei Deiner Frage sehr hilfreich zu wissen, wo Du schon nachgeschaut hast, und was Du schon probiert hast. Es hat mich etwas in den Fingern gejuckt "RTFM, STFN!" zu antworten.

Alex
 
Ich denke wahrscheinlich zu MySQL Orientiert.

Die Anfrage an die Tabelle sieht bei mir irgendwie so aus:
tabelle_einsetzen("Erste Spalte-Eintrag", "Zweite Spalte-Eintrag");

Ich brauche nur eine Funktion, mit der ich eine Zeile in eine Tabelle eintragen kann. Die Werte sind nur einfache Zahlen.

Geht das so einfach oder ist das viel schwerer?
 
Es ist ein anderes Modell. Nicht schwerer, nicht leichter, anders. Tu Dir und uns den Gefallen, dich einmal mit der NSTableView Dokumentation auseinanderzusetzen, und vielleicht einfach mal eins der vielen, vielen Beispiele auszuprobieren. Oder willst Du das Dir die Leute fertigen Code schicken?

Alex
 
Okay, ich habe die ganze Zeit nach einer Funktion gesucht, die so aussieht wie beschrieben.

Dann werde ich mich mal einlesen.
 
Denk daran: Ein NSTableView ist ein VIEW, während eine SQL Tabelle ein Datenspeicher (Model) ist. Das sind unterschiedliche Dinge.

Im Prinzip (und mit CoreData) kannst Du eine SQL Tabelle direkt als Datenquelle für einen NSTableView verwenden, aber das ist nur eine Möglichkeit.

Alex
 
NSTableView ist in der Tat ein bissl heftig...

Also, sehe ich das richtig? Ich muss in einer Klasse, welche als DataSource fürs
TableView angegeben ist, die Methoden
Code:
(int)numberOfRowsInTableView:(NSTableView *)aTableView
und
Code:
(id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(int)rowIndex
implementieren.

Aber was ist, wenn meine Klasse Qb, welches die "Mutterklasse" meines
Programms ist, gleichzeitig als Datasource fungieren soll, da es die Daten
enthält? Ist das möglich oder muss ich mein Programm komplett neu kon-
zeptionieren?
 
Ich nehme an, mit "Mutterklasse" meinst Du einen Controller.
Ist nur "schlechter Stil", aber Du mußt es nicht unbedingt trennen.
Ich würde es aber trennen - DU tust Dir leichter.

NSTableView ist etwas gaaanz einfaches.

No.
 
Ok ich werds trennen. Und dann rufe ich von meiner DataSource
eine Methode des Controllers auf, welche die Datenbankabfrage
durchführt, die Daten zurückgibt, und die DataSource wiederum
fügt die Daten ein.
 
Zuletzt bearbeitet:
So jetzt sollte es mehr Sinn machen....
 
Ich würde dir echt zu Cocoa Bindings raten. Das ist *viel* einfach. Da musst du nur ein Array eines Dictionaries zur Verfügung stellen. Den Rest machst du im Interface Builder.
 
Ich probiers gerade auf die herkömmliche Art, ohne Cocoa-Bindings.
Funktioniert sogar, der Witz ist nur:

Mein NSTableView liegt innerhalb eines NSTabViews. Klicke ich nun
den vorgesehenen Button "NSTableView füllen", wird die Tabelle mit
Daten gefüllt. Allerdings: Die Änderung wird erst sichtbar, nachdem
ich zu dem anderen Tab gewechselt habe, und zurück.

Bug oder irgendein eigenartiges Feature?
 
AHHHH!!!

Ein
Code:
[dataSource reloadData];
reicht völlig aus. Genau das war auch das erste, was ich
probiert habe, wegen einer fehlenden Verbindung ist es
aber immer wirkungslos geblieben *Kopf->Tisch*
 
Zurück
Oben Unten