Frage

Ich habe zwei Kontrollen in meinem Interface Builder-Datei, und jede dieser Kontrollen habe ich einen separaten Delegierten Klasse in Code (Control1Delegate und Control2Delegate) erstellt. Ich habe zwei „Objekte“ im Interface Builder, machte sie von dieser Art, und die Steuerelemente verbunden, um sie als Teilnehmer. Die Delegierten gut funktionieren. Mein Problem ist, ich muss die anderen Delegierten einen Delegierten, Informationen zu teilen, und ich bin nicht sicher, wie.

Was ist der beste Weg, dies zu tun? Kombinieren Sie die zwei Teilnehmer in einer Klasse, oder irgendwie eine dritte Klasse zuzugreifen, die sie beide lesen können? Da ich nicht wirklich die Klasse überall in meinem Code initialisiert, ich bin nicht sicher, wie ein Hinweis auf die tatsächliche Instanz davon zu bekommen (wenn es eine tatsächliche Instanz davon ist), oder auch die „main“ Klasse zuzugreifen, die das Projekt kam mit.

War es hilfreich?

Lösung

können Sie fügen Auslässen von beiden Delegierten der anderen Delegierten. Es gibt zwei Möglichkeiten, um einen Ausgang zu einem Objekt in IB hinzufügen (vorausgesetzt, Sie verwenden Xcode / IB-Version 3.0 oder höher:

  1. Wenn Sie nicht den Code für Ihre Stellvertretung Klassen noch generiert haben, wählen Sie den gewünschten Delegat, dann öffnen Sie die „Objektidentität“ -Reiter im IB-Inspektor. Fügen Sie ein „Class Ausgang“ des Typs NSObject. Sie sollten dann in der Lage sein, diesen neuen Ausgang an den anderen Delegierten zu setzen. Natürlich müssen Sie den Code für Ihre Delegierten Klasse generieren und die generierten Quelldateien in Ihrem Xcode-Projekt hinzufügen, bevor Sie die Spitze laden können.

  2. Wenn Sie bereits den Code für die Delegierten Klasse erzeugt (oder ein NSObject zu Ihrem NIB hinzugefügt und legen Sie seine Klasse zu einer vorhandenen Klasse in Ihrem Xcode-Projekt), eine Instanzvariable an die Delegaten-Klasse hinzufügen:

    IBOutlet id outletToOtherDelegate;

    Solange Ihr Xcode-Projekt geöffnet ist (wie durch die grüne Blase in der linken unteren Ecke Ihres NIB Fenster angezeigt), IB wird die neue Steckdose automatisch erkennen und ermöglicht es Ihnen, es auf die andere Delegatobjekt in Ihrem NIB zuweisen .

Cocoa verbindet automatisch diese Anschlüsse an NIB Ladezeit. Sobald awakeFromNib auf Instanzen Ihrer Delegierten Objekte aufgerufen wird, kann man davon ausgehen, dass alle anderen Objekte in der NIB instanziiert wurden und alle Ausgänge angeschlossen sind. Sie sollten nicht einen Auftrag auf Anrufe awakeFromNib gehen jedoch davon aus.

Andere Tipps

Ich glaube, Sie Auslässen auf jeder und erstellen können sie Quer binden, so dass sie jeweils die gleichen Daten haben die ganze Zeit. Wenn Objekt ein Modell ist sie brauchen, zu teilen, das ist ziemlich ordentlich. Ich weiß nicht wirklich, wie dies zu tun; Ich glaube, ich sah es in einem iPhone Tutorial einmal!

Ich habe nicht mein Mac vor mir zur Zeit, da ich bei der Arbeit bin, aber wäre es möglich, eine Instanz von einem Delegierten zu binden, an ein Mitglied des anderen Delegierten? Dies würde einen NSArrayController zu einem Mitglied einer anderen Controller-Klasse zur Bindung, zum Beispiel ähnlich sein.

Allerdings, je nachdem, was die Delegierten Klassen tun, wenn die Aufgaben ähnlich sind, würde ich sie wahrscheinlich nur kombinieren in einmal Klasse. Das würde beseitigen das Problem überhaupt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top