2009-05-23 3 views
1

Ich lade eine Feder als:Warum ist UILabel 0x0?

ContentViewController *theController = [[ContentViewController alloc] initWithNibName:@"ContentView" bundle:nil]; 

, die auf sie ein Etikett hat. Der View-Controller hat ein IBOutlet von UILabel mit einer @property von retain und synthetisierter Variable. Als ich um die Spitze, wie oben von einer anderen Klasse zu laden und verweisen Sie die Eigenschaft Text des Labels wie:

theController.myLabel.text = @"testing..."; 

myLabel hat die Adresse von 0x0. Vor der Zuweisung ist der Text "ungültig". Nach der Zuweisung ist der Typ ContentViewController. Es gibt ein Problem mit der Speicherverwaltung. Irgendwelche Ideen?

+0

In welcher Methode von ContentViewController rufen Sie theController.myLabel.text = @ "testing ..."; ? –

+0

Ich rufe es nicht in ContentViewController. Dies geschieht in der Hauptansicht der Klasse der AppController. Dies ist eine Ansicht basierte App. – 4thSpace

+0

Ich habe eine neue Ansicht basierte App erstellt, eine andere Xib mit Controller hinzugefügt und habe das gleiche Problem. – 4thSpace

Antwort

0

ViewControllers laden nur ihre Ansichten bei Bedarf. Der implizite Aufruf getMyLabel in der Zuordnung bewirkt, dass die Ansicht geladen und der Ausgang verbunden wird. Was den Typfehler angeht, weiß ich nicht, warum myLabel mit einem Typ von ContentViewController enden würde. Sie sollten die Verbindungen in Interface Builder überprüfen und sicherstellen, dass sie ordnungsgemäß angeschlossen sind.

+0

Ausgänge sind ordnungsgemäß verbunden. Nach der obigen Zuweisung ist myLabel immer noch 0x0. – 4thSpace

3

Die Verbindungen werden nicht sofort beim Init-Aufruf hergestellt. Die Hauptansicht wird erst geladen, wenn auf die Eigenschaft view des Ansichtscontrollers zugegriffen wird, wodurch alle anderen IBOutlets ebenfalls festgelegt werden. Wenn Sie versuchen, auf ein IBOutlet zuzugreifen, bevor die Ansicht geladen wird, ist es gleich Null. Im Allgemeinen sollte der Zuweisungscode in -viewDidLoad gehen. Wenn Sie etwas tun müssen, bevor die Ansicht auf dem Bildschirm hinzufügen, Zugang nur die Aussicht, bevor irgendetwas zu einem der IBOutlets zuweisen:

theController.view; 
theController.myLabel.text = @"testing..."; 
0

Ist u irgendeinen Code schreiben in,

-(void)loadView { } 

Methode?

Wenn ja, wird das IBOutlet-Objekt nicht zugewiesen.
Versuchen Sie, diese Funktion zu kommentieren.
Und wenn Sie brauchen diese Funktion gefeuert Aufruf loadNibnamed: Methode für den Aufruf dieser ViewController.

Verwandte Themen