当更新我的应用程序的部署目标到15.0时,我收到以下警告:
“windows”在iOS 15.0中已弃用:在UIWindowScene.windows相关窗口场景中使用www.example.com
我已经试着在网上找了些什么来补救这个问题,但是找不到太多关于这个问题的信息。希望你能给我一些建议。
我在发生此警报的地方使用的代码行是:
let window = UIApplication.shared.windows[0]
然后在我的ViewDidLoad()中:
DispatchQueue.main.async { [weak self] in
if defaults.bool(forKey: "darkModeBoolSwitch") == true {
self?.window.overrideUserInterfaceStyle = .dark
} else if defaults.bool(forKey: "darkModeBoolSwitch") == false {
self?.window.overrideUserInterfaceStyle = .light
}
3条答案
按热度按时间nkcskrwz1#
@DuncanC解决方案的替代方案也可能适用于您:
UIApplication
有一个connectedScenes
属性,它列出了应用程序中所有当前活动的场景(对于大多数应用程序,这只是一个主场景)。在这些场景中,您可以过滤
UIWindowScene
s的场景(忽略当前不活动且在前景中的场景),并在其中找到具有关键窗口的第一个场景:我不太愿意将这个扩展称为
UIApplication.keyWindow
,因为这些API被弃用的原因是因为它可以推广到多场景应用程序,每个应用程序都有自己的关键窗口......但这应该可以工作。如果您仍然需要支持iOS 14,而iOS 14没有
UIWindowScene.keyWindow
,您可以将firstWhere(...)?.keyWindow
替换为:flatMap(\.windows).first(where: \.isKeyWindow)
。6qqygrtg2#
我对苹果最近实现场景的变化已经过时了。
我做了一点调查,发现了一个协议
UIWindowSceneDelegate
看起来您应该向应用程序的info.plist文件添加一个“ApplicationSceneManifest”,告诉系统作为应用程序窗口场景委托的类。
然后在这个类中你要实现
scene(_:willConnectTo:options:)
方法。当调用这个方法时,你应该尝试将传递给你的UIScene
转换为UIWindowScene
,如果转换成功,你可以向窗口场景请求它的窗口并将其保存到一个示例属性。这应该允许您保存指向应用程序窗口的指针,并在需要时使用它。
ecr0jaav3#
经过大量的研究,以下是对我有效的方法-