2010-09-23 4 views
42

Ho solo una finestra e ho provatocome ottenere il mio UIWindow usando UIApplication?

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

ma questo restituito zero.

Ho anche provato:

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

Ma questo ha sollevato un 'eccezione e l'applicazione chiusa, quando ho cercato di stampare

[[UIApplication sharedApplication].windows count] 

E' stampato 0

Nota: Io sto mettendo questo nel mio metodo viewDidLoad del mio unico view controller e questa è completamente una nuova applicazione View View per iPad quindi non ho cambiato nulla, solo cercando di ottenere la finestra

Please help me per ottenere questo oggetto

risposta

47

Se la finestra principale è una presa del vostro AppDelegate (che dovrebbe essere il caso), si può semplicemente utilizzare

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

Sì, questo ha funzionato bene, grazie ... :) –

19

finestra chiave della vostra applicazione non è impostare fino a quando [window makeKeyAndVisible] viene chiamato nel delegato dell'app. Il tuo UIViewController viene probabilmente caricato da una NIB prima di questa chiamata. Questo spiega perché keyWindow restituisce zero.

Fortunatamente, il controller di visualizzazione non ha bisogno di passare attraverso UIApplicazione per ottenere la finestra. Si può solo fare:

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

Grazie per il vostro aiuto, ma questo non ha funzionato in viewDidLoad .. –

+5

Questo perché la vista non è ancora parte della gerarchia della vista. Lo stesso vale per 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

modo più semplice è quello di ottenere la finestra dal delegato app invece:

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

Ottima risposta ... –