swift - 如何解决: 'keyWindow' was deprecated in iOS 13. 0

标签 swift ios13 uiwindow uiscene

我正在将 Core Data 与 Cloud Kit 结合使用,因此必须在应用程序启动期间检查 iCloud 用户状态。如果出现问题,我想向用户发出一个对话框,到目前为止我都是使用 UIApplication.shared.keyWindow?.rootViewController?.present(...) 来实现的。

在 Xcode 11 beta 4 中,现在有一条新的弃用消息,告诉我:

'keyWindow' was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes

我该如何呈现对话框?

最佳答案

编辑我在这里提出的建议在 iOS 15 中已被弃用。那么现在怎么办?好吧,如果一个应用程序没有自己的多个窗口,我认为公认的现代方法是获取应用程序的第一个 connectedScenes,强制到 UIWindowScene,并获取其第一个窗口。但这几乎正是已接受的答案的作用!所以我的解决方法在这一点上感觉相当无力。不过,由于历史原因,我会保留它。

<小时/>

公认的答案虽然巧妙,但可能过于复杂。您可以更简单地获得完全相同的结果:

UIApplication.shared.windows.filter {$0.isKeyWindow}.first

我还要提醒您,不应过于认真地对待 keyWindow 的弃用。完整的警告消息如下:

'keyWindow' was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes

因此,如果您在 iPad 上不支持多个窗口,那么也可以继续使用 keyWindow

关于swift - 如何解决: 'keyWindow' was deprecated in iOS 13. 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57134259/

相关文章:

ios - 按最高价格解析排序

ios - 我如何识别不同的pickerView?

ios - 如何将一个viewController中的图像数据发送到另一个viewController?

swift - 不区分大小写地检查字符串是否存在于数组中

swift - iOS 13 自定义字体下载和安装

ios - 尝试状态恢复时在基于文档的应用程序中获取 "Error Domain=NSCocoaErrorDomain Code=257"

iOS 13 图像捕捉 API 用于访问外部相机的文件系统?

iphone - UIWindows 或 UIView

ios - 将第二个 UIWindow 与 rootViewController 一起使用时,界面旋转变黑

ios - 第二个UIWindow没有任何触摸事件