Wie verwende ich Objekte einer anderen .m-Datei

  • Wie verwende ich Objekte einer anderen .m-Datei

    Hallo alle!

    Eine ganz blöde Frage, sorry, aber wie kann ich auf Instanzvariablen eines Objektes zugreifen, das mit einem anderen m-File initialisiert wurde?

    Ich habe zwei m-Files: Ein AppDelegate, in dem die fragliche Instanzvariable in applicationDidFinishLaunching initialisiert wird, und einen ViewController der in einer "IBAction" auf diese Variable zugreifen soll.

    Wie mache ich dem zweiten m-File eigentlich das Objekt oder die Variable aus dem ersten bekannt?

    Ich steh grad völlig auf dem Schlauch und weiß noch nicht mal, unter welchem Stichwort ich im Internet oder meinen Büchern suchen müsste ...
  • Original von fwtag
    Aber das macht doch nur die Struktur verfügbar und nicht den Inhalt, oder?

    Ich benötige Zugriff auf das Objekt, das ich in der anderen m-Datei instanziiert habe ...


    achso, hab ich falsch verstanden, na wenn du immer das selbe Objekt brauchst, dann bietet sich an das Objekt als Singleton anzulegen.
  • Ich mache es so, dass ich dem Objekt, welches die wo anders instanzierten Objekte benötigt, in der init-Methode eine Referenz auf das Daten-Objekt übergebe. Diese Referenz speichere ich dann lokal und kann jederzeit auf das Objekt zugreifen.

    Aber irgendwie finde ich das auch reichlich suboptimal. Ich suche auch einen Weg, solche "gobalen" Objekte zu verwalten und "überall" zugreifbar zu machen. Ich bin mal auf weitere Antworten gespannt.


    Edit:
    Singleton hört sich brauchbar an.
  • Für deinen Fall reicht ja eigentlich der AppDelegate als Singleton. Du kriegst mit NSApp das NSApplication-Object (dasselbe wie [NSApplication sharedApplication] aufzurufen) und mit der "delegate" Methode erhältst du den AppDelegate. Am besten kreierst du im AppDelegate eine Methode, welche dir die gewünschte Instanzvariable zurückgibt, etwa so:

    AppDelegate.h

    Quellcode

    1. ...
    2. - (NSWasAuchImmer *) myVariable;
    3. ...


    AppDelegate.m

    Quellcode

    1. ...
    2. - (NSWasAuchImmer *) myVariable
    3. {
    4. return myVariable;
    5. }
    6. ...


    ViewController.m

    Quellcode

    1. ...
    2. NSWasAuchImmer *variable = [[NSApp delegate] myVariable];
    3. ...
    Widgetschmie.de • Life is too short for gadgets
  • Original von fwtag
    Singleton

    Habe ich befürchtet. Wieder was Neues ;)

    Bei Cocoa / ObjC habe ich das Gefühl, immer wenn man an einem kleine Fädchen zeiht, fällt gleich das ganze Regal um ... ;)

    Singletons ist nix was Objective-C erfunden hätte.
    Gibts in fast allen Objekt-Orientierten Sprachen.


    Manfred
  • Singleton ist die Bezeichnung eines Entwurfmusters der Gang of Four.

    Original von asrael
    Gibts in fast allen Objekt-Orientierten Sprachen.

    Das ist so missverständlich. Singletons (bzw. Entwurfsmuster) haben erstmal nichts mit objekt-orientierten Sprachen zu tun, sondern stellen Lösungswege für wiederkehrende Probleme da. Du kannst Entwurfsmuster auch in nicht objekt-orientierten Programmiersprachen einsetzen. Sie sind auch kein Bestandteil einer Sprache, sondern Schablonen bestimmte Probleme zu lösen.

    Wer allerdings ernsthaft objekt-orientiert programmieren will, kommt an Entwurfsmustern nicht vorbei.
    „Meine Komplikation hatte eine Komplikation.“
  • Am besten kreierst du im AppDelegate eine Methode, welche dir die gewünschte Instanzvariable zurückgibt, etwa so:

    Das klingt wirklich sehr simpel und praktisch. Danke!

    Ich habe auch mal nach Singletons recherchiert. Wäre auch ein gangbarer Weg und nicht zu aufwendig, ich möchte nur die ganze Angelegenheit so schlank wie möglich halten.

    Grüße
    Frank

    PS: Wie ich jetzt verstanden habe: Singletons haben nichts mit Handys zu tun ;)