• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Anfänger: Verbindung zwischen einem ViewController und einem Model-Objekt

Agenor

Jonagold
Registriert
24.10.10
Beiträge
22
Hallo!

Ich mache gerade meinen ersten Gehversuche in der iPhone Programmierung. Folgende Frage konnte ich mir bislang noch nicht beantworten:

Wie kann ein ViewController auf ein Model-Objekt (aus dem Model-View-Controller Muster) zugreifen, dass durch ein anderes Objekt instanziert wurde?

Hintergrund:
Ich arbeite im Moment mit der "TabBar Application" Vorlagen. Die zugehörige MainWindows.xib enthält das AppDelegate Objekt sowie den TabBar ViewController meinen seinen SubViewControllern für die einzelnen Seiten/Tabs.

Im AppDelegate habe ich ein Model-Objekt instanziert, dass Daten aus einer Datenbank lädt und verwaltet. Auf einer Seite des TabBar habe ich eine Eingabemaske gebastelt um die Daten eines neuen Objektes eingeben zu können. Nach der Eingabe der Daten und der Besätigung per OK-Button sollen die Daten dann vom entsprechenden ViewController dieser Seite an das Model-Objekt übergeben werden damit diese dort gespeichert werden. Aber wohler soll der ViewController das Model-Objekt vom AppDelegate kennen?

Klar, ich kann im ViewController eine Property bzw. ein Outlet vom Typ "ModelObject" deklarieren. Damit ist dieser dann bereit mit einem ModelObject verbunden zu werden. Aber wie und wo soll ich dies zuweisen?

Im Interface Builder kann ich keine Verbindung zwischen dem Outlet des ViewControllers und dem AppDelegate herstellen. Kein Wunder, der AppDelegate selbst ist ja nicht vom Typ ModelObject. Der AppDelegate müsste sein ModelObject irgendwie veröffentlich, aber wie?

Die Verbindung über den IB scheitert also. Nun kann ich natürlich umgekehrt im AppDelegate ein Outlook vom Typ "ViewController" anlegen und dieses dann im IB mit dem fraglichen ViewController verbinden. Im AppDelegate könnte ich dann nach dem Start auf dieses Outlet zugreifen und so die ModelObjekt-Property des ViewControlers programmatisch setzten. Aber ist das wirklich der richtige Weg? Gibt es keine Möglichkeit dem ViewController per IB zu sagen, wo er sein ModelObject findet?

Ich habe schon versucht aus der Objekt Bibliothek ein "Object" in die NIB Datei einzufügen und diesem den Typ ModelObjekt zu geben. Dann kann ich natürlich das ModelObject-Outlet des ViewControllers direkt mit diesem Objekt verbinden (Typ stimmt). Aber bei diesem ModelObject handelt es sich dann um eine eigene Instanz, die vom IB erzeugt wird und nicht um die Instanz die vom AppDelegate erzeugt wird. Ist das der richtige Weg? Das ModelObject von der NIB-Datei erzeugen lassen und dieses dann mit dem AppDelegate und dem ViewController über entsprechende Outlets verbinden?

Oder gibt es eine Möglichkeit das ModelObject, dass vom AppDelegate instanziert wird im IB zugänglich zu machen?

Was ist hier der "richtige" Weg?

Besten Dank für eure Hilfe!
Agenor
 
Also ich mach das immer so, dass ich verschiedene UIViews erstelle und dann die UITabBar Einträge mit einem IBAction event verbinden und über dieses dann die UIViews mit
Code:
[mainview addSubview:UIView1];
aufrufe.

Viel Erfolg
Jonnonnes

PS: Demnächst bitte kürzer und knapper fassen. Du hattest glück, dass ich gerade so viel Zeit hatte