如何使用UIApplication获取我的UIWindow?

我只有一个窗口,我试了一下

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

但是这返回零。

我也试过:

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

但是,当我试图打印出来时,这引发了一个exception,应用程序closures了

 [[UIApplication sharedApplication].windows count] 

它打印0

注:我把这个在我唯一的视图控制器的viewDidLoad方法,这完全是一个新的iPad视图基础应用程序,所以我什么也没有改变,只是试图获得窗口

请帮我拿这个东西

如果你的主窗口是你的AppDelegate的sockets(应该是这样),你可以简单地使用

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

最简单的方法是从应用程序委托中获取窗口:

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

在应用程序委托中调用[window makeKeyAndVisible]之前,应用程序的关键窗口不会被设置。 这个调用之前,你的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.