我正在将 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/