2010-09-23 7 views
42

Ich habe nur ein Fenster und ich versuchteWie bekomme ich meine UIWindow mit UIApplication?

UIWindow* mWindow = [[UIApplication sharedApplication] keyWindow]; 

aber kehrte gleich Null.

Ich habe auch versucht:

UIWindow* mWindow = (UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0]; 

Aber dies hat eine Ausnahme ausgelöst und die App geschlossen ist, wenn ich

[[UIApplication sharedApplication].windows count] 

Es 0

Hinweis gedruckt drucken ausprobiert: Ich stelle dies in meinem View Controller ViewDidLoad-Methode und dies ist eine völlig neue iPad View-basierte Anwendung, so änderte ich nichts, nur um das Fenster

zu bekommen

Bitte helfen Sie mir dieses Objekt zu erhalten

Antwort

47

Wenn Ihr Hauptfenster ein Auslass des AppDelegate ist (was der Fall sein sollte), können Sie einfach

MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate)); 
[myDelegate.window ...] 
+1

Ja, das schön gearbeitet, dank ... :) –

19

Ihrer Anwendung Schlüsselfenster nicht verwenden kann, ist Legen Sie fest, bis [window makeKeyAndVisible] in Ihrem App-Delegaten aufgerufen wird. Ihr UIViewController wird wahrscheinlich vor diesem Aufruf von einer NIB geladen. Dies erklärt, warum keyWindow Null zurückgibt.

Zum Glück muss Ihr View-Controller nicht durch UIApplication gehen, um das Fenster zu erhalten. Sie können einfach tun:

UIWindow *mWindow = self.view.window; 
+0

Danke für Ihr Hilfe, aber das hat nicht funktioniert in ViewDidLoad .. –

+5

Das ist, weil die Ansicht noch nicht Teil der View-Hierarchie ist. Das gleiche gilt in ViewWillAppear :. – tomwhipple

5
[[[UIApplication sharedApplication] windows] objectAtIndex:0]; // You can also check the count of this to make sure, because if there are no windows it will crash. 
31

Der einfachste Weg ist es, das Fenster aus dem AppDelegate zu bekommen statt:

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window]; 
// Do something with the window now 
+0

Große Antwort ... –