2009-05-12 5 views
1

Ich verwende nicht IBOutlet korrekt oder eine andere Subtilität mit wie NIB-Dateien arbeiten verursacht mir Probleme - jede Hilfe wäre sehr geschätzt (zögern Sie nicht, einen alternativen Weg vorzuschlagen, um was zu erreichen Ich will).IBOutlet wird nicht in Cocoa MVC Projekt

Ich habe ein View-Objekt und ein Controller-Objekt. Beide sind in der NIB. Die Init des Controllers wird auch aufgerufen, wenn die NIB geladen ist und die Ansicht im Callback 'watchFromNib' initialisiert wird. Ich brauche einen Weg, um diese beiden Objekte zu verbinden - speziell aktivieren Sie das Objekt 'View', um Funktionen auf dem Controller aufzurufen.

Basierend auf Online-Dokumentation besteht die Möglichkeit, diese Verbindung herzustellen, darin, ein IBOutlet in der Ansicht zu definieren und es im Interface Builder mit dem Controller zu verbinden. Also habe ich ein

IBOutlet Controller* _controller; 

in der View-Schnittstelle und grafisch verbunden es mit dem Controller-Objekt im Interface Builder durch eine Verbindung von der Ansicht an den Controller zu machen und den _controller Ausgangs an die Controller zuweisen (die blaue Generic Object Box im Interface Builder).

Zur Laufzeit ist _controller jedoch immer _nil. Ich habe überprüft, dass die Init des Controllers tatsächlich aufgerufen wurde.

Gibt es etwas Offensichtliches, das mir fehlt? Eine einfachere Möglichkeit, diese beiden zu verbinden? Da sie beide von der NIB erstellt werden, habe ich kein gemeinsames Objekt mit einem Zeiger auf beide.

+0

Welches Objekt ist der Besitzer der Feder? –

Antwort

0

Versuchen Sie, auf die IBOutlet in viewDidLoad instad zuzugreifen.

Wenn awakeFromNib aufgerufen wird, sind nicht alle IBOutlets aufgefüllt (obwohl die Dokumentation scheint es zu implizieren).

+0

Ich versuche nicht, es in awakenFromNib zu verwenden ... Ich benutze es viel später, wenn ein Menü-Klick führt zu einigen Code im View-Objekt ausgeführt wird. Gibt es einige Refcounting Foo muss ich mich sorgen? –

+0

Btw, ich erwarte, dass sobald das IBOutlet gesetzt ist, sollte es verfügbar sein, bis die Aufräumarbeiten erledigt sind .... Ist das gültig? –

+1

Alle IBOutlets * werden * zur Zeit von wakeFromNib gesetzt, es sei denn, Sie haben sie nicht in der Schreibfeder festgelegt. Wenn das nicht passiert, jonglieren Sie entweder mehrere Nibs und tun das so schlecht oder (viel weniger wahrscheinlich) Sie haben einen Fehler gefunden. Im letzteren Fall sollten Sie dies melden (https://bugreport.apple.com/). –