2 Stimmen

Wie setze ich den Eigentümer meiner NIB-Datei auf ein Objekt in einer anderen NIB-Datei?

Ich bin neu in Cocoa und habe Probleme, meine Nib-Datei in mehrere Nib-Dateien aufzuteilen.

Meine MainMenu.nib enthält eine Tracker Controller Objekt, das eine Unterklasse von NSObject . Es hat einen Ausgang zu einem Show Tracker Menüpunkt in meinem Hauptmenü.

Meine TrackerWindow.nib die Klasse "Eigentümer der Datei" ist auf TrackerController und hat Ausgänge zum Fenster und zur Ansicht in dieser NIB-Datei.

Ich bin mir nicht sicher, wie ich den Dateieigentümer der zweiten Feder zu einem Proxy für die instanziierte TrackerController in der ersten Feder. (Ich glaube, ich brauche die TrackerController Instanz in der ersten Feder, so dass ich IB verwenden kann, um den Menüpunkt Ausgang zu setzen).

Mache ich es falsch? Wenn ja, wie kann ich IB verwenden, um Ausgänge für dasselbe Objekt in mehreren NIB-Dateien zu setzen? Wenn nicht, wie kann ich den File's Owner der zweiten Nib-Datei auf die TrackerController Ich habe bereits in der ersten Feder instanziiert?

2voto

titaniumdecoy Punkte 18400

Dies ist aus der Perspektive eines iOS-Entwicklers geschrieben (mit View-Controllern). Ich bin nicht sicher, wie sich Mac OS X unterscheidet, aber es sollte nicht schwierig sein, die Ideen zu übertragen.


Der einfachste Weg, den Dateibesitzer einer Schreibfeder zu setzen, ist, ihn als Argument an loadNibNamed:owner:options: :

[[NSBundle mainBundle] loadNibNamed:@"Tracker" owner:trackerController options:optionsDict];

Das obige Snippet geht davon aus, dass trackerController ist eine Instanz von UIViewController. Wenn dies nicht der Fall ist, verwenden Sie stattdessen die folgende Lösung.


Anstelle der Verwendung von initWithNibName:bundle: erstellen Sie eine TrackerViewController wie folgt (wobei trackerController ist ein Verweis auf das vorhandene TrackerController-Objekt):

NSDictionary *proxyDict = [NSDictionary dictionaryWithObject:trackerController forKey:@"trackerController"];
NSDictionary *optionsDict = [NSDictionary dictionaryWithObject:proxyDict forKey:UINibExternalObjects];
TrackerViewController *trackerViewController = [[[TrackerViewController alloc] init] autorelease];
[[NSBundle mainBundle] loadNibNamed:@"Tracker" owner:trackerViewController options:optionsDict];
// Display trackerViewController

Erstellen Sie ein externes Objekt mit einem Identifikator von trackerController in Tracker.nib und verbinden Sie Ihre Ausgänge/Aktionen mit diesem Objekt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X