Ответ 1
Если ваше главное окно является выходом вашего AppDelegate (что должно быть так), вы можете просто использовать
MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
У меня есть только одно окно, и я попробовал
UIWindow* mWindow = [[UIApplication sharedApplication] keyWindow];
но это вернуло нуль.
Я также пробовал:
UIWindow* mWindow = (UIWindow*)[[UIApplication sharedApplication].windows objectAtIndex:0];
Но это вызвало исключение, и приложение закрылось, когда я попытался распечатать
[[UIApplication sharedApplication].windows count]
Отпечатано 0
Примечание. Я помещаю это в свой единственный метод viewDidLoad контроллера view, и это совершенно новое приложение для iPad iPad, поэтому я ничего не изменил, просто пытаясь получить окно
Пожалуйста, помогите мне получить этот объект
Если ваше главное окно является выходом вашего AppDelegate (что должно быть так), вы можете просто использовать
MyAppDelegate* myDelegate = (((MyAppDelegate*) [UIApplication sharedApplication].delegate));
[myDelegate.window ...]
Самый простой способ - получить окно из делегата приложения:
UIWindow *keyWindow = [[[UIApplication sharedApplication] delegate] window];
// Do something with the window now
Ключ вашего приложения не установлен до тех пор, пока < <20 > не будет вызван в ваш делегат приложения. Ваш UIViewController, вероятно, загружается из NIB до этого вызова. Это объясняет, почему keyWindow
возвращает nil.
К счастью, вашему диспетчеру просмотра не нужно проходить через UIApplication, чтобы получить окно. Вы можете просто:
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.