意外的nil窗口在_UIApplicationHandleEventFromQueueEvent中

42

我的一款旧应用程序在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,其中包括我的Window对象以及一个UINavigationController,第一个视图控制器也定义在其中。下面的图片显示了与App Delegate连接的输出口。

屏幕截图中白色的"view"是UIWindow。右侧的视图是UINavigationController(导航栏隐藏),其中定义了第一个视图控制器。

enter image description here

我该如何解决这个问题,而无需从头开始创建一个新项目来重新生成应用程序?

编辑:我刚发现有一个微小的条带,在那里我的按钮实际上会接收到它们的轻按/点击。

我还注意到我的self.view.window为nil。我该如何确保设置了它?

enter image description here


这里没有任何答案对我有用。一个解决方法是切换到故事板,它们似乎没有这个问题。 - mrueg
13个回答

0

我们遇到了同样的问题,并尝试了本主题中提出的解决方案,但都没有成功。

最终对我们有用的是重新编写逻辑,纯程序化地代替使用xib。这样做后,我们不再看到“意外的nil窗口”错误,视图在整个屏幕上都能被正确响应。


0
在我的情况下,这是一段旧代码,在阅读完整个代码后,我发现了这行代码。
UIApplication.shared.delegate?.window??.isUserInteractionEnabled = false

我按照我的逻辑处理它,现在它可以正常工作了。


-3

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

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

为了支持之前的版本,我会在运行时检查版本:
if([[[UIDevice currentDevice]  systemVersion] floatValue] >= 8.0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接