Problem mit NSTableView

16/10/2007 - 08:29 von Ingo Soetebier | Report spam
Hallo,
ich hab angefangen mich ein bisschen mit Cocoa zu beschàftigen und
'hànge' derzeit an einem Problem mit einem NSTableView. Die Tabelle
wird über eine DataSource befüllt. Passen alle Elemente in die Tabelle
ist alles OK. Sind es aber mehr Elemente, so dass Scrollbalken
erscheinen müssten, dann bleibt das Programm hàngen und zwar beim
Beschreiben der letzten Tabellenzelle, die nicht mehr ganz angezeigt
wird.
Ist es nicht so, dass automatisch ein Scrollbalken erscheint, wenn die
Tabelle mehr Werte enthàlt als reinpassen? Wenn nein, was muss ich da
noch machen?

Gruß,
Ingo
 

Lesen sie die antworten

#1 aclauss
16/10/2007 - 13:57 | Warnen spam
Ingo Soetebier wrote:

erscheinen müssten, dann bleibt das Programm hàngen und zwar beim
Beschreiben der letzten Tabellenzelle, die nicht mehr ganz angezeigt
wird.
Ist es nicht so, dass automatisch ein Scrollbalken erscheint, wenn die
Tabelle mehr Werte enthàlt als reinpassen? Wenn nein, was muss ich da
noch machen?



Eigentlich gar nichts. Das sollte ganz automatisch richtig laufen.

Wie genau hast Du denn die tabelle angelegt? Über den Interface-Builder?
Wenn ja, kann man da eigentlich nichts falsch machen.

Mache doch mal in Xcode beim Debuggen die Console(n) auf ("Console Log"
und "Standard I/O Log" aus dem "Debug"-Menü). Ich vermute mal, daß Du
einfach nur die Grenzen des Array mit Deinen Daten überschreitest. D.h.
Du versuchts mehr Elemente aus einem Daten-Array zu lesen, als drin
sind. Sowas würde dann in der Regel in den Console-Fenstern gemeldet.

Auch nette Fehler kann man über die Speicherverwaltung machen:

Wenn man Objekte (die in der Tabelle ja lànger angezeigt werden) von
"fremden" Objekten ermittelt hat, dann gehörem einem diese Objekte
nicht, und der Eigentümer könnte die irgendwann freigeben. Danach wird
man beim Zugriff auf diese Objekte Probleme bekommen. D.h. nicht
vergessen, über "retain" und "release" für die Dauer der Benutzung zu
verhindern, daß das Objekt wirklich freigegeben und gelöscht wird.

Falls man die Objekte selbst anlegt, bedenken, daß z.B. ein
Array mit [NSArray array] angelegt nicht lange überlebt: der
Autoreleasepool wird das bei nàchster Gelegenheit wieder entsorgen. Für
dauerhafte Speicherung in einer Tabelle ist das nicht geeignet. Man muß
auch hier entweder mit "retain"/"release" arbeiten, oder das Array z.B.
über [[NSArray alloc] init] anlegen, so daß es nicht sofort, wie im
obigen Beispiel schon bei der Erzeugung einen "autorelease" verpasst
bekommt.

Im Debugger kannst Du über Breakpoints aber auch an den passenden
Stellen das Programm anhalten und z.B. schrittweise über gewisse
Code-Fragmente drübergehen, um die Variablen im Auge zu haben, ob die
das enthalten, was man erwartet.

Alexander

Ähnliche fragen