Designfrage zu ViewController und AppDelegate

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 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 ()

  • 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