web-dev-qa-db-fra.com

comment obtenir mon UIWindow en utilisant UIApplication?

Je n'ai qu'une seule fenêtre et j'ai essayé

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

mais cela est revenu à zéro.

J'ai aussi essayé:

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

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

[[UIApplication sharedApplication].windows count]

Il a imprimé 0

Remarque: je mets cela dans la seule méthode viewDidLoad de mon contrôleur de vue et il s'agit complètement d'une nouvelle application basée sur la vue de l'iPad, donc je n'ai rien changé, j'essaye simplement d'obtenir la fenêtre

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

43
user416445

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

MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
47
Phlibbo

Le moyen le plus simple consiste à 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
35
iwasrobbed

La fenêtre de clé de votre application n'est définie que le [window makeKeyAndVisible] est appelé dans le délégué de votre application. Votre UIViewController est probablement en cours de chargement à partir d'une NIB avant cet appel. Cela explique pourquoi keyWindow retourne nil.

Heureusement, votre contrôleur de vue n'a pas besoin de passer par UIApplication pour obtenir la fenêtre. Vous pouvez simplement faire:

UIWindow *mWindow = self.view.window;
20
cduhn
[[[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.
5
BadPirate