• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Was gibt es Schöneres als den Mai draußen in der Natur mit allen Sinnen zu genießen? Lasst uns teilhaben an Euren Erlebnissen und macht mit beim Thema des Monats Da blüht uns was! ---> Klick

NSTabView Subviews aktualisieren

MarCus88

Alkmene
Registriert
29.10.09
Beiträge
31
Hallo liebe Apfelgemeinde,

da ich in meinen Semesterferien nun doch schon recht viel Objective-C und Cocoa gepaukt hab, wollte ich einmal in eigenen kleinen Applikationen versuchen. Hier sei nochmal Werbung gemacht für das Buch von Amin Negm-Awad (Objective-C und Cocoa)! Das Buch, als auch der Videopodcast von Peter und Ingo (Xcode von NULL auf hundert) haben mir Einiges gebracht, denke ich.

Nagut, genug drumherum geredet, jetzt zu meinem Anliegen.

Mein kleines Projekt ist der Versuch ein einfaches kleines Adressbuch zu programmieren, in dem man sich Gruppen definieren kann, in denen wiederum Personen samt Kontaktdaten angelegt werden können. Da Bilder manchmal mehr als 1000 Worte sagen, hab ich mal einen Screenie gemacht:



Man erkennt, dass das GUI grob in 3 Teile gegliedert ist:
- links ein TableView, welches die Gruppen anzeigt, samt Add-/Removebuttons
- mittig ein TableView, welches die Personen der links selektierten Gruppe anzeigt, samt Add-/Removebuttons
- rechts ein TabView, welches detaillierte Adress- und Kontaktdaten zur selektierten Person enthält

Ich sage vielleicht noch grob etwas zum Code. Für die beiden TableViews, als auch für das TabView hab ich jeweils einen separaten Controller programmiert. Der Controller für das Gruppentableview übergibt per Delegate die selektierte Gruppe an den Controller für das Personentableview. Dieser Controller wiederum übergibt dem Controller für das Detailtabview die selektierte Person. Der Detailtabviewcontroller kümmert sich dann per Delegate darum, dass die einzelnen Tabs ihre Outlets mit den entsprechenden Personendetails laden.

So jetzt aber zu meinem Problem. Das Standardverhalten von so einem Programm ist es ja, dass die Outlets des Tabs sich nach dem Anlegen einer neuen Person neu laden. Sprich im Falle meines Screenshots müssten im ersten Tab der Name sowie der Vorname der frisch hinzugefügten Person befinden. Das ist allerdings nicht der Fall, weil ich dieses Neuladen der Outlets für das Tabview nur in seinem Delegate undzwar konkret beim Umschalten der Tabs realisieren kann.

Gibt es ein Tableviewdelegate wie "Tableviewinhalte gerade geändert" oder aber existiert eine Möglichkeit das Tabviewdelegate "tabView:didSelectTabViewItem:" aufzurufen, auch wenn ich im Tableview eine Mehrfach- oder gar leere Auswahl habe?

Danke für die Tipps im Voraus!

P.S.: Bei Bedarf kann ich das Projekt auch gern noch hochladen.

Grüße
Marcus
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Bindings ist da ganz klar das Stichwort. Oder gleich CoreData mit Bindings.

Gruss ppocket
 

MarCus88

Alkmene
Registriert
29.10.09
Beiträge
31
@Poljpocket:
Danke für den Hinweis mit den Bindings. Mittlerweile reagieren die Subviews meines TabViews schon deutlich angenehmer. Sprich die Daten werden entsprechend der Selektion aktualisiert, wie ich mir das gewünscht hab. Dies hab ich allerdings per KVO gelöst, da ich einfach das jeweils übergebene Objekt observiere und daraufhin eine Methode aufrufe, welche die Outlets aktualisiert. Das einzige was allerdings immernoch schöner aussehen würde, wäre die Sache mit neu hinzugefügten Personen. Sprich, dass diese nach Eingabe des Namens direkt in den TableView Outlets aktualisiert werden.

Wie würde ich das mit Bindings konkret lösen, könntest du mich da eventuell anleiten? Mit CoreData arbeite ich übrigens nicht, da ich mich um die Organisiation der Daten und der dauerhaften Speicherung über NSUserDefaults selbst kümmere.

Grüße
Marcus

Edit: Das Projekt bis zum jetzigen Stand kann ich dazu auch gern hochladen, wenn du dir dann einen besseren Überblick verschaffen kannst, was man in meinem Falle tun kann :)
 

Poljpocket

Salvatico di Campascio
Registriert
07.01.07
Beiträge
432
Das mit KVO, ist ja genau das, was die Bindings für dich machen würden. Also das Binding ersetzt lediglich die Registration als Observer bei einem Objekt und die Methode, welche du nun extra programmiert hast. Bindings sind also nichts Anderes, als automatisches KVC/KVO.

Gruss ppocket

PS: Ja, lad doch das Programm einfach mal hoch :)
 

MarCus88

Alkmene
Registriert
29.10.09
Beiträge
31
@Poljpocket:
Okay ich habs mal hochgeladen bei Rapidshare. Da ich allerdings nicht im Besitz eines Premiumaccounts bin, kann die Datei maximal 10 Mal heruntergeladen werden, ehe sie von der Seite gelöscht wird. Drum schick ich dir den Link mal via privater Nachricht ;)

Vielleicht hast du auch einen Vorschlag für ein anderes Problem dieses Projektes betreffend. Ich möchte in meinem Programm eine Funktion einfügen, mit der ich jeder Person eine Bilddatei zuordnen kann (denke mal man sieht an welcher Stelle^^). Vermutlich werde ich das per Drag&Drop oder aber über die Klasse NSOpenPanel lösen müssen oder? Ich bin für jeden Hinweis dankbar :)

P.S.: Bitte um Nachsicht was meinen Programmierstil angeht, ich bin noch nicht soooo lange bei ObjC und Cocoa ;)
 
Zuletzt bearbeitet: