mehrere Objekte rufen gleichen Delegate: wie unterscheiden?

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

  • mehrere Objekte rufen gleichen Delegate: wie unterscheiden?

    Hi!

    Habe eine eigene Klasse, die 2 Delegates hat: finishOK und finishNotOK. In verschiedenen ViewControllern werden die 2 Methoden implementiert.

    Jetzt muss ich in den Delegates aber unterscheiden, welches Objekt es gerufen hat. Wie macht man das am geschicktesten?

    Danke Jungs!
    Daniel.
  • Oh ok... wo liegt mein Denkfehler?
    Meine Klasse speichert Daten im Internet und holt Daten aus dem Internet. Wenn das erledigt ist ruft es die Delegates. In einem ViewController speichere ich 2x Daten ins Internet, erstelle also 2 Objekte, die beide den Delegate rufen. Und je nachdem welche Daten gespeichert wurden, soll sich die View anders verhalten....
  • Deshalb übergibt die Delegate klasse ja normalerweise immer sich selber als ersten Parameter.
    Sieh dir dazu mal die typischen Beispiele vom tableView an.
    dann kannst du an dem object erkennen welches sich zurück meldet.

    gruss

    claus
    2 Stunden Try & Error erspart 10 Minuten Handbuchlesen.

    Pre-Kaffee-Posts sind mit Vorsicht zu geniessen :)
  • du sprichst immer von delegates - also mehrzahl. es gibt nur EINEN delegate. und das ist in deinem fall der viewcontroller. diesem schickst du dann delegate-methoden (eine von beiden) die eventuell in einem protokoll sind welches dein viewcontroller unterstützt. und wie bereits gesagt wurde, schickt so gut wie jeder ABSENDENDE (deine upload-klass) sich selbst als ersten parameter (tableview, urlconnection etc). somit kannst im ABGESANDTEN (dein viecontroller) unterscheiden wer dir jeztz eine nachricht geschcikt hat (der erste oder der zweite upload in deinem fall). hab vorhin die 2 wörter extra in deutsch geschrieben dass man den unterschied genauer erkennt.
  • Also erst einmal ist es völlig okay, mehrere Delegates zu haben. Das widerspricht überhaupt keinem Prinzip.

    Es sind aber zwei Fälle zu unterscheiden: Mehrere gleichartige Delegates oder mehrere verschiedene Delegates (vor allem zu zwei verschiedenen Themengebieten.) Im ersten Fall sollte man über Notifications nachdenken.

    Ich meine aber, dass du Delegates und Delegating-Object verwechselst. Nehme ich mal hier deinen Text:
    " In einem ViewController speichere ich 2x Daten ins Internet, erstelle also 2 Objekte, die beide den Delegate rufen. Und je nachdem welche Daten gespeichert wurden, soll sich die View anders verhalten...."

    Du hast also 1 Delegate (View-Controller) für 2 Delegating-Objects (Internetverbindungsobjekte). Das ist ein Standardproblem und wird stets so gelöst, dass man das Delegating-Object in der Delegatemethode als ersten Parameter mitliefert.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    Also erst einmal ist es völlig okay, mehrere Delegates zu haben. Das widerspricht überhaupt keinem Prinzip.

    Es sind aber zwei Fälle zu unterscheiden: Mehrere gleichartige Delegates oder mehrere verschiedene Delegates (vor allem zu zwei verschiedenen Themengebieten.) Im ersten Fall sollte man über Notifications nachdenken.

    Ich meine aber, dass du Delegates und Delegating-Object verwechselst. Nehme ich mal hier deinen Text:
    " In einem ViewController speichere ich 2x Daten ins Internet, erstelle also 2 Objekte, die beide den Delegate rufen. Und je nachdem welche Daten gespeichert wurden, soll sich die View anders verhalten...."

    Du hast also 1 Delegate (View-Controller) für 2 Delegating-Objects (Internetverbindungsobjekte). Das ist ein Standardproblem und wird stets so gelöst, dass man das Delegating-Object in der Delegatemethode als ersten Parameter mitliefert.


    klar, apple trennt es ja auch auf (zb delegate und datasource), jedoch macht delegate1, delegate2, delegateN recht wenig sinn.
    btw: ich verstehe nicht ganz wie apple die aufteilung zwischen datasource und delegate macht. zb anhand von UIPickerView: in der delegate gibt man den titel der einzelnen rows an. meiner meinung nach würde das doch eher in die datasource gehören oder übersehe ich etwas?
    developer.apple.com/library/io…UIPickerViewDelegate.html
  • Die Aufteilung bei Apple, gerade was Datasources angeht, ist auch nicht stets korrekt. Das wurde offenkundig, als Bindings eingefügt wurden. Da musste man nämlich in bestimmten Fällen (fällt mir gerade nicht ein, steht aber in einer alten Auflage als Beispiel) eine Datasource implementieren, obwohl man Bindings nutzte, was ziemlich unsinnig ist.

    Also nicht von Apple verwirren lassen. Die haben schon mehr als einen Fehler gemacht. Das war übrigens einer auf meiner Liste "Habe ich schon immer gesagt und irgendwann hat es Apple eingesehen."
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?