2010-09-23 36 views
42

Je n'ai qu'une seule fenêtre et j'ai essayécomment obtenir mon UIWindow en utilisant UIApplication?

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

mais retourné nul.

J'ai aussi essayé:

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

Mais cela a soulevé une exception et l'application fermée, quand j'ai essayé d'imprimer

[[UIApplication sharedApplication].windows count] 

Il imprimé 0

Note: Je suis en train de ceci dans ma seule méthode ViewDidLoad du contrôleur de vue et ceci est complètement une nouvelle application iPad View Based donc je n'ai rien changé, juste essayer d'obtenir la fenêtre

S'il vous plaît aidez-moi à obtenir cet objet

Répondre

47

Si votre fenêtre principale est une sortie de votre AppDelegate (qui devrait être le cas), vous pouvez simplement utiliser

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

Oui cela a fonctionné bien, merci ... :) –

19

fenêtre clé de votre application ne défini jusqu'à ce que [window makeKeyAndVisible] soit appelé dans votre délégué d'application. Votre UIViewController est probablement chargé depuis un NIB avant cet appel. Ceci explique pourquoi keyWindow retourne zéro. Heureusement, votre contrôleur de vue n'a pas besoin de passer par UIApplication pour obtenir la fenêtre. Vous pouvez juste faire:

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

Merci pour votre help mais cela n'a pas fonctionné dans viewDidLoad .. –

+5

C'est parce que la vue ne fait pas encore partie de la hiérarchie de vue. La même chose est vraie dans 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

plus simple est d'obtenir la fenêtre du délégué de l'application à la place:

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

Bonne réponse ... –