在_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,但是transform
matrix被改变了。
解决scheme很简单
self.window = [UIWindow new]; [self.window makeKeyAndVisible]; self.window.frame = [[UIScreen mainScreen] bounds];
因此,在窗口从根视图控制器获取其方向之后,帧被设置。
你不必添加任何代码来解决这个问题。
打开主要的xib文件,从左侧find“Window”, Visible at Launch
启用Visible at Launch
和Full 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.m
replace代码解决了问题:
老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)