как получить мой UIWindow с помощью UIApplication? - PullRequest
43 голосов
/ 23 сентября 2010

У меня есть только одно окно, и я попытался

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

, но это вернуло ноль.

Я также попытался:

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

Но это вызвало исключение иприложение закрылось, когда я попытался распечатать

[[UIApplication sharedApplication].windows count]

Было напечатано 0

Примечание. Я помещаю это в метод viewDidLoad моего единственного контроллера представления, и это полностью новый iPad View BasedПриложение, поэтому я ничего не изменил, просто пытаюсь получить окно

Пожалуйста, помогите мне получить этот объект

Ответы [ 4 ]

47 голосов
/ 24 сентября 2010

Если ваше главное окно является выходом вашего AppDelegate (что и должно быть), вы можете просто использовать

MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
35 голосов
/ 25 марта 2013

Самый простой способ - получить окно от делегата приложения

UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now
20 голосов
/ 24 сентября 2010

Окно ключа вашего приложения не устанавливается, пока не будет вызван [window makeKeyAndVisible] в вашем делегате приложения. Ваш UIViewController, вероятно, загружается из NIB перед этим вызовом. Это объясняет, почему keyWindow возвращает ноль.

К счастью, вашему контроллеру представления не нужно проходить через UIApplication, чтобы получить окно. Вы можете просто сделать:

UIWindow *mWindow = self.view.window;
5 голосов
/ 04 августа 2011
[[[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.
...