web-dev-qa-db-ja.com

解決方法: 'keyWindow'はiOS 13.0で廃止されました

Cloud KitでCore Dataを使用しているため、アプリケーションの起動時にiCloudユーザーのステータスを確認する必要があります。問題が発生した場合は、ユーザーにダイアログを発行したいと思います。これまではUIApplication.shared.keyWindow?.rootViewController?.present(...)を使用して行います。

Xcode 11ベータ4では、新しい非推奨メッセージが次のように表示されます。

'keyWindow'はiOS 13.0で廃止されました:複数のシーンをサポートするアプリケーションには使用しないでください。接続されているすべてのシーンでキーウィンドウが返されます。

代わりにダイアログをどのように提示しますか?

76
Hardy

berni の回答に触発されました

let keyWindow = Array(UIApplication.shared.connectedScenes)
        .compactMap { $0 as? UIWindowScene }
        .flatMap { $0.windows }
        .first(where: { $0.isKeyWindow })
0
Milander

それで試してください:

UIApplication.shared.windows.filter { $0.isKeyWindow }.first?.rootViewController!.present(alert, animated: true, completion: nil)
0
Anas