Klassenobjekt soll Methode der anderen Klasse aufrufen

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

  • Klassenobjekt soll Methode der anderen Klasse aufrufen

    Hallo Zusammen,

    ich habe ein kleines Problem und ich hoffe mal, dass mir hier geholfen wird. Und zwar handelt es sich um folgendes:
    Nehmen wir an ich habe zwei Klassen. Die eine soll meine Basis sein, die andere eine bestimmte Aufgabe erledigen, welche nach Abschluss der anderen Klasse mitgeteilt werden soll.
    In der Arbeitsklasse (die Zweite) gibt es ein Delegate, welches durch eine Funktion gesetzt wird. Diese Funktion wird von der Basisklasse aufgerufen (sowas wie starteArbeit).

    Wenn nun das Delegate ausgelöst wird, dann soll das Ergebnis der Aufgabe an die Basisklasse gegeben werden. Ich möchte allerdings keine neue Instanz der Basisklasse haben. Geht das überhaupt?

    Bin etwas durcheinander, mir schwirrt der Kopf... ?(

    LG,

    Der Tele :thumbsup:
    Loves Metal :evil:
  • Also. Ich habe natürlich eine Instanz der Basisklasse. Die wiederrum hat eine Instanz der Arbeiterklasse. Jetzt könnte ich ja ganz schlau sein und in meiner Basisklasse eine Methode setzten, welche als Parameter das Ergebnis der Aufgabe bekommt. Dann würde ich in meiner Arbeiterklasse ein Objekt der Basisklasse anlegen und das Ergebnis des Delegates dann an die Klasse schicken, das ist aber Quatsch.
    Loves Metal :evil:
  • Das was du machen willst ist genau das was du schreibst. Eine delegation. Aber Du hast das Prinzip Delegate anscheinend noch nicht richtig verstanden.

    Deine Basisklasse wird zum Delegate der Arbeitsklasse. Das bedeutet in der delegate property der arbeiterklasse (Welche per definition immer eine property vom Typ id<DelegateName> ist) trägst du den Zeiger auf deinen Basisklasse ein.
    Die Arbeitsklasse implementiert nur ein DelegateProtokoll mit z.B. der Methode:

    Quellcode

    1. -(void)arbeitsKlasse:(ArbeitsKlasse*)deineArbeitsKlasse didfinishWithResult:(Irgendwas)wertOderCollectionOderWasAuchImmer undZweiterWert:(Irgendwas)zweiterWert.......


    Dann implementiert die Basisklasse diese Methode.
    Wenn deine Arbeitesklasse fertig ist ruft diese dann einfach

    Quellcode

    1. [self.delegate arbeitsKlasse:self didFinishWithResult:Wert undZweiterWert:Wert2.....]


    auf und fertig ist der Lack.

    Gruß

    Claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • Verstehe das immernoch nicht so ganz richtig:

    Du hast deine Basisklasse, soweit klar.
    In der Basisklasse hast du eine Instanz der Arbeiterklasse.
    So, in der Arbeiterklasse soll nun eine Aktion ausgeführt werden, welche deine Basisklasse benachrichtigt?
    Hab ich das in etwa richtig verstanden?

    Edit: Dann hat Claus schon die Lösung gebracht ...