Datenzugriff bei App mit mehreren Views

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

  • Datenzugriff bei App mit mehreren Views

    Hallo,
    ich habe erst vor kurzem angefangen kleine Apps fürs iPhone zu schreiben. Mit Büchern und Tuturials kommt man da ja prinzipiell recht gut "rein" und kann die ersten kleinere Apps selbst schreiben.

    Jetzt möchte ich aber eine etwas größere App in Angriff nehmen, genauer gesagt ein kleines Spiel (inkl. Gamecenter). Die Struktur soll in etwa so aussehen:

    GameName_AppDelegate (UIApplicationDelegate mit window)
    |
    |-> Menü
    (UIViewController)
    |-> Game (UIViewController)
    |-> Einstellungen (UIViewController)
    |-> Highscores (UIViewController)
    |-> Info/Credits (UIViewController)

    Prinzipiell haben die Views natürlich eigenständige Aufgaben und Daten, aber es gibt natürlich auch Fälle, wo ich auf Daten von anderen Klassen zugreifen muss/möchte.
    Ganz einfaches Beispiel:
    Im Menü wird der Button "Einstellungen" geklickt, der View "Einstellungen" wird angezeigt.
    Hier wird den Schwierigkeitsgrad von "easy" auf "hard" geändert, zurück ins Menü, dort "Spiel starten" und der "Game"-View wird angezeigt.
    Hier (also im "Game"-View") muss ich jetzt natürlich wissen, welcher Schwierigkeitsgrad ausgewählt wurde...

    Meine Frage ist nun, wie lässt sich sowas am sinnvollsten erreichen? In dem genannten Beispiel würde ich für jetzt ohne lange zu überlegen eine Property (z.B. int difficutly) in der Klasse "Game" anlegen. Nur wie kann ich auf diese von dem Einstellungsview zugreifen? Die Views sind ja sozusagen"parallel"... Würde man es da einfach so machen, dass man dem Einstellungs-View von AppDelegate eine Referenz auf das "Game"-Objekt mitgibt, so dass über diese Referenz auf die Properties und Methoden zugegriffen werden kann? Oder wie würdet Ihr sowas machen...

    Sorry für die wahrscheinlich blöde Anfängerfrage, ich hoffe es ist zumindest klar geworden, wo mein Problem oder meine Unsicherheit liegt... :whistling:

    Bin für jeden Tipp dankbar!

    Danke und Gruß,
    martiko
  • DU musst immer erst überlegen, wann und wo du deine Daten brauchst und welchen Umfang die Daten haben.

    Etwas "simples" wie ein Schwierigkeitsgrad würde man in den User Defaults abspeichern.
    „When I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.“
    – James Whitcomb Riley
  • Erstmal Danke für die Antwort. Bei so etwas "einfachem" wie der Schwierigkeit hast Du sicher recht, da kann man es (und sollte vielleicht auch) über die User Defaults machen.

    Wobei ich einen noch einfacheren Fall noch gar nicht durchdacht habe, wahrscheinlich fehlt mir noch ein bisschen das Gefühl und die Erfahrung mit der Objektorientierung...

    Die Views (und zugehörigen Objekte) sind ja alle unterhalb vom AppDelegate angesiedelt. Wie kann ich da überhaupt vom Menü die anderen (auf der gleichen Ebene) liegenden Views anzeigen? In der Menü-Klasse habe ich ja gar keine Referenz auf die anderen Views... :huh:

    Wie gesagt, sorry, für die dummen Anfängerfragen, ich hoffe es kann sich jemand erbarmen und mir erklären, wie man sowas "normalerweise" macht...
  • Hallo martiko,

    auch wenn dein Beitrag schon 10 Tage her ist, möchte ich kurz meinen Senf dazugeben.

    Versuche, die Game-Logik / Game-Status als separates Objekt im Hintergrund zu halten.
    In diesem Objekt, das entweder über einen hier so beliebten Singleton überall zugreifbar ist
    oder im AppDelegate sitzt, kannst du dann leicht den Spiel-Zustand festhalten.

    Wenn du z.B. dieses GameState-Objekte in deine AppDelegate-Dateien aufnimmst, könntest
    du in den Controllern der Views folgendermaßen darauf zugreifen:

    Quellcode

    1. #import "DeinAppDelegate.h"
    2. ...
    3. DeinAppDelegate *appdelegate = [[UIApplication sharedApplication] delegate];
    4. appdelegate.gameState.soundVolume = 4;


    Jürgen