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
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 ...]
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
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;
[[[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.