Mehrere Delegaten in Ziel C
Ich komme aus der C# - event-Modell, und ich Frage mich, ob es ein standard-Weg, um Benachrichtigen von mehreren Teilnehmern eine Veranstaltung?
Ich habe eine ClassCDelegate Protokoll, ich will beide ClassA und ClassB zu implementieren. Gibt es eine Möglichkeit kann ich zuweisen einer Instanz von ClassC beide ClassA und ClassB als Delegierte ohne dass Sie manuell erstellen Sie eine Liste der delegate-Variablen innerhalb ClassC und Durchlaufen Sie?
InformationsquelleAutor der Frage Mr Snuffle | 2009-09-05
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kakao Delegaten werden verwendet, um zu erreichen, inversion of control und verringern die Notwendigkeit für Unterklassen. Es ist durchaus möglich, mehrere Stellvertreter für ein einzelnes Objekt ist, aber dies geschieht, wenn es Sinn macht zu delegieren, die verschiedenen Arten von Entscheidungen auf unterschiedliche Objekte. Ein gutes Beispiel HIERFÜR ist
WebView
von WebKit, die fünf Delegierten verantwortlich für so unterschiedliche Bereiche wie Ressourcen-be-und Navigations-Politik.C#'s event–delegate-system, die es erlaubt ein Objekt zu registrieren, mit anderen Objekts benachrichtigt werden, wenn ein bestimmtes Ereignis Eintritt, ist am nächsten an der mehrere Benachrichtigungs-APIs von Kakao. Die verschiedenen APIs, die Sie möglicherweise stoßen sind, von der höchsten Ebene zur niedrigsten:
NSNotificationCenter
NSDistributedNotificationCenter
CFNotificationCenter
Alle sind ähnlich im Geiste, so werde ich nur in Betracht ziehen, die Sie verwenden würden, in diesem Fall:
NSNotificationCenter
.Beobachter, wie ClassA und ClassB, registrieren Sie Ihr Interesse an Benachrichtigungen mit
NSNotificationCenter
. Sie können angeben, für die ein Interesse anWenn eine passende Benachrichtigung geschrieben, um das notification center, die Beobachter benachrichtigt werden, durch aufrufen der Methode, die Sie geliefert bei der Anmeldung mal mit dem notification center. Die Methode hat immer die gleiche Art: es gibt nichts und akzeptiert ein einzelnes argument, ein
NSNotification
Objekt.Würden Sie in der Regel behandeln Ihre situation, indem er ClassC deklarieren Sie eine Konstante für die Benachrichtigung name in die header-Datei, zum Beispiel,
Interessierte Beobachter, wie ClassA und ClassB, können dann registrieren Sie Interesse an dieser Mitteilung:
Anstelle der Registrierung einen Selektor und hinzufügen einer Methode, um die Beobachter zu behandeln, den Rückruf können Sie nun auch registrieren, eine operation queue und einen block für die Ausführung in die Warteschlange, wenn eine passende Benachrichtigung geschrieben.
Wenn das Ereignis im Zusammenhang mit der Meldung tritt auf, ClassC sendet die Benachrichtigung an das notification center:
Das notification center wird dann schauen Sie durch die Liste der Beobachter, die finden, dass passend zu dieser Meldung, auf und ruft die entsprechende Methode auf.
InformationsquelleAutor der Antwort Jeremy W. Sherman
Alternative, um das notification center, ist die Verwendung eines NSProxy Unterklasse, um Nachrichten weiterzuleiten, wird detailliert in der Veröffentlichung auf:
http://engineering.hoteltonight.com/handling-multiple-delegates-in-ios
Klasse HTDelegateProxy ist verfügbar unter:
https://github.com/hoteltonight/HTDelegateProxy
InformationsquelleAutor der Antwort Jacob Jennings
Können Sie auch ein Objekt das Ereignis behandeln und die leiten es dann zu einem zweiten Objekt.
InformationsquelleAutor der Antwort vy32
Es ist auch wichtig zu beachten, dass Benachrichtigungen sind eine Einbahnstraße - Sie können nicht senden Informationen zurück, als Delegierte können. Der einzige Fall, wo Sie wollen, um zu iterieren durch eine Liste der Delegierten ist, wenn Sie Ihre delegierende Klasse erwartet zurück, Informationen aus seiner Delegierten.
InformationsquelleAutor der Antwort Shaun Budhram
Können Sie nur ein delegate-Objekt. Wenn Sie möchten, zu informieren, verschiedene Objekte der änderungen sollten Sie mit dem NSNotificationCenter und post NSNotification Nachrichten, die Ihre Objekte warten können.
InformationsquelleAutor der Antwort Rob Keniger
Versuchen MultiDelegate Sie ermöglicht es, nach vorne zu delegieren Methoden, um eine beliebige Anzahl von Delegierten Objekte.
InformationsquelleAutor der Antwort Alejandro