在_UIApplicationHandleEventFromQueueEvent中意外的零窗口

我的一个旧应用程序不适用于iOS8。 当我启动应用程序,并尝试点击任何地方的屏幕上,我在我的控制台中得到这个消息:

unexpected nil window in _UIApplicationHandleEventFromQueueEvent, _windowServerHitTestWindow: <UIWindow: 0x7fe4d3e52660; frame = (0 0; 320 568); opaque = NO; autoresize = RM+BM; gestureRecognizers = <NSArray: 0x7fe4d3e2c450>; layer = <UIWindowLayer: 0x7fe4d3e86a10>> 

我使用的是旧式的MainWindow.xib。 在MainWindow.xib中是我的Window对象,还有一个UINavigationController,它也有第一个View Controller。 下图显示连接到App Delegate的Outlets。

下面截图中的白色“视图”是UIWindow。 右侧的视图是UINavigationController(隐藏的导航栏),里面定义了第一个ViewController。

在这里输入图像说明

如何解决这个问题,而无需重新创build整个应用程序与一个新的项目?

编辑:我刚刚发现有一个TINY地带,其中我的button实际上会收到他们的水龙头/点击。

我也注意到,我的self.view.window是零。 我如何确保设置?

在这里输入图像说明

除了BH回答。 也看这个答案 。

从纵向方向启动我的横向专用应用程序时,出现此问题(也不应该在最近打开的应用程序列表中显示该应用程序,这可以通过按两次“主页”button来看到)也许,iOS以某种方式caching方向和窗口大小。

我的代码是

 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; [self.window makeKeyAndVisible]; 

我设置了W+H调整窗口的掩码,它并没有帮助我,因为窗口没有被旋转resize,但是transformmatrix被改变了。

解决scheme很简单

 self.window = [UIWindow new]; [self.window makeKeyAndVisible]; self.window.frame = [[UIScreen mainScreen] bounds]; 

因此,在窗口从根视图控制器获取其方向之后,帧被设置。

你不必添加任何代码来解决这个问题。

打开主要的xib文件,从左侧find“Window”, Visible at Launch启用Visible at LaunchFull Screen at launch

在这里输入图像说明

检查你的窗口笔尖文件,并确保它占用全屏幕。 在我的应用程序中,触摸事件没有在右侧的条上注册,我遇到了类似的问题。 一旦我设置我的MainWindow.xib占用全屏,我没有更多的错误,触摸事件再次工作。 我的应用程序也被显示在横向,但我的MainWindow.xib具有纵向尺寸。

有时只是简单的设置,缺less一些价值:点击项目 (无论您命名您的项目)名称项目,然后确保常规选项卡被选中,滚动到底部。 查找应用程序图标和启动图像,确保在启动屏幕文件字段中有一些值,这应该是主要或LaunchScreen

如果有人认为这有用:

就我而言,我曾经使用过

 self.window = [[UIWindow alloc] init]; 

代替

 self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 

这就是问题的原因。

我在一个没有Default-568h@2x.png启动屏幕的旧应用程序上收到这个错误。 首次推出较高的iPhone时,这是iOS的信号,应用程序可以处理新的几何。 否则,它会显示在一个320×480的窗口中。 有趣的是,我甚至没有注意到应用程序没有使用全屏。

我无法testingefpies解决scheme,但是我在应用程序中修复它的方法是用Storyboard取代MainWindow.xib。

我也喜欢将我的旧项目升级到iOS 7和8.实际上,我不使用MainWindow.xib,而是在application:didFinishLaunchingWithOptions:手动创buildwindow application:didFinishLaunchingWithOptions:

但是在启动后,我unexpected nil window in _UIApplicationHandleEventFromQueueEvent错误中有相同的unexpected nil window in _UIApplicationHandleEventFromQueueEvent

所以,就我而言,通过将部署目标更改为6.0并在main.mreplace代码解决了问题:

老main.m:

 int main(int argc, char *argv[]) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil); [pool release]; return retVal; } 

新main.m:

 int main(int argc, char *argv[]) { @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([YourAppDelegate class])); } } 

我们遇到了同样的问题,我们在这个线程中尝试了所提出的解决scheme,但没有成功

最后为我们工作的是重新编写逻辑而不是使用xib,而是以编程方式进行纯粹的编程。 在此之后,我们看不到'意外的零窗口'错误,并且视图正在整个屏幕上被击中。

如果这有助于任何人在这里绊倒,我也有这个错误,当我设置窗口的框架时, UIScreen.mainScreen().bounds大小翻转。

在创build窗口时,使用新的ios 8“nativeBounds”UIScreen属性而不是“bounds”解决了我的问题。 无需其他更改。

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] nativeBounds]] autorelease]; 

为了支持以前的版本,我使用以下版本进行运行时检查:

 if([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
    Interesting Posts