Du bist nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: OS X Entwicklerforum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

  • »MasterOP22« ist der Autor dieses Themas

Beiträge: 149

Wohnort: Münster (Westfalen)

Beruf: Softwareentwicker (Java) bei einem mittelgroßen IT-Dienstleister im Bankensektor

Hobbys: Fußball (BVB), Proggen (Surprise), alles lesen und gucken was mit Apple zu tun hat, Joggen, Inliner fahren, Kino, DVD

  • Private Nachricht senden

1

Dienstag, 6. Dezember 2011, 09:35

Designfrage zu ViewController und AppDelegate

Hallo zusammen,

ich habe mal eine reine Designfrage. Ich entwickel gerade eine App für den Mac. Diese besteht in Prinzip aus einem Hauptfnster mit na Tabelle und na handvoll kleinerer Panel, die als Dialog oder per NSDrawer an dem Hauptfenster hängen soll.

Nun meine Frage, wenn ich z.B. in der Tabelle des Hauptfensters, welche einen eigenen ViewController besitzt, einen Eintrag selektiere und möchte damit einen Dialog aufrufen, sollte ich den Dialog direkt aus dem ViewController erzeugen und aufrufen oder macht es aus Designsicht mehr Sinn, die Aufgabe des Öffnen des Dialogs oder auch des NSAlertView an das AppDelegate zu delegieren. Oder ist das AppDelegate dafür nicht vorgesehen und man sollte lieber sein eigenes Delegate dafür anlegen.

Ein konkretes Beispiel: Ich hab eine Klasse MyDelegate, welches das Delegate und die Datasource der Tabelle im Hauptfenster ist. Ebenso hat MyDelegate ein Outlet und eine Action für einen AddButton unterhalb der Tabelle.
In der AddAction rufe ich ne Methode in eingebundenen Library auf. Ich übergeb auch ein NSError** an diese Methode, falls in der Library ein Fehler auftritt. Tritt ein Fehler auf, möchte ich ein NSAlertView im Hauptfenster anzeigen mit dem Inhalt des NSError. Nun die Frage, wo erzeuge ich das NSAlertView und zeige es an. Ich könnte aus meinem MyDelegate das AppDelegate damit beauftragen, weil es ja schon ein Outlet des Hauptfensters hat. Aber AppDelegate ist ja eine heikle Sache beim Design. Gibs saubere Ansätze für die Aufgabe?

Was ist eure Meinung als teilweise langjährige Obj-C Nutzer.

Gruß
MasterOP22

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »MasterOP22« (6. Dezember 2011, 10:22)


Beiträge: 2 892

Wohnort: Karlsruhe

Beruf: Softwareentwickler

Hobbys: American Football, Alternative Music, Apple

  • Private Nachricht senden
  • »MasterOP22« ist der Autor dieses Themas

Beiträge: 149

Wohnort: Münster (Westfalen)

Beruf: Softwareentwicker (Java) bei einem mittelgroßen IT-Dienstleister im Bankensektor

Hobbys: Fußball (BVB), Proggen (Surprise), alles lesen und gucken was mit Apple zu tun hat, Joggen, Inliner fahren, Kino, DVD

  • Private Nachricht senden

3

Donnerstag, 8. Dezember 2011, 10:53

Ja ich habe mich einfach mal dazu entschlossen folgendes Design zu wählen.

Ich habe einen WindowController als HauptController für alle Fenster und alle weiteren Controller. Rufe ich jetzt z.B. ein Controller für ne TableView auf oder einem DialogFenster, überschreibe ich in dem entsprechenden Controller den Delegate und verlange dass dieses Delegate mein eigenes CustomProtocol "MyBlaBlaDelegate" implementiert. Im IB verlinke ich dann den Delegate des neuen Controller mit dem HauptController.#

Das eigene Protocol enthält dann halt die notwendigen Methoden wie z.B. - (void) displayError:(NSError*)error; Tritt ein Fehler in dem neuen Controller auf, schick ich dem Delegate (HauptController) eine Message displayError mt dem entsprechenden Error der aufgetreten ist (die Message kann von dem Delegate ja auf jedenfall bearbeitet werden, dass das Delegate ja das eigene Protocol unterstützen muss) und der HauptController kennt ja alle Fenster und Controller und der zeigt den Fehler als Sheet an.

Keine Ahnung, ob man das besser lösen kann, aber für meine Zwecke funktioniert das erstmal. Oder habt ihr da noch bessere Vorschläge?

Gruß
MasterOP22

Social Bookmarks