UIApplication sharedApplication - keyWindow是nil?
在iOS应用程序中,UIApplication
类中的sharedApplication
方法通常用于在应用程序范围内保持全局状态(如当前显示的视图控制器、应用程序的主题、窗口大小等)。但是,在使用sharedApplication
方法时,必须确保调用该方法的线程是主线程,否则可能会导致一些奇怪的问题,例如keyWindow
为nil。
原因:
在非主线程上,iOS应用程序可能会对窗口和视图控制器进行一些预处理,例如加载视图树或执行其他一些初始化任务。因此,在非主线程上使用sharedApplication
方法可能会导致keyWindow
返回为nil,因为该方法只能在主线程上被调用。
解决方案:
要解决这个问题,可以在调用sharedApplication
方法的线程是主线程之前,使用一个延迟加载或异步加载的方法来确保主线程被正确调用。下面是一个使用延迟加载的方法示例:
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {
UIApplication.sharedApplication()
}
这个示例中,DispatchQueue
类的asyncAfter
方法用于将执行任务延迟到下一个帧(0.1秒以后),从而确保主线程被正确调用。你也可以使用类似的方法来处理其他线程上下文。
没有搜到相关的沙龙
领取专属 10元无门槛券
手把手带您无忧上云