Closed5
[SwiftUI] AppDelegate window にアクセスしようとしてクラッシュ
特定の場面で次のようなエラーでクラッシュが起こった。
libc++abi: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SwiftUI.AppDelegate window]: unrecognized selector sent to instance 0x600001fdc400'
terminating with uncaught exception of type NSException
環境
- Xcode 12.5
- iOS 14.5
SwiftUI 以前に作られたコードで、window のインスタンスにアクセスするコードがある。
AppDelegate を持たずに開始したプロジェクトの場合 (プロジェクト作成時にInterface をUIKit App Delegate
ではなく SwiftUI App
にした場合) 、AppDelegate のwindow インスタンスが無いため上記のクラッシュが起こってしまう。
解決方法
@UIApplicationDelegateAdaptor
を使い、AppDelegate
を定義する。
その際にwindow
変数を定義しておく。(定義しないと表題のようにクラッシュする)
@main
struct YourApp: App {
+ @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
+ class AppDelegate: UIResponder, UIApplicationDelegate {
+ var window: UIWindow?
+ }
クラッシュは解消されたが、座標がおかしい?
そもそもSwiftUI からwindow にアクセスするような処理はなるべく避けた方が良い?
ViewController を使わざるをえない場面でも、表示の処理はSwiftUI 側だけで完結させるのが良さそうな予感。
このスクラップは2021/05/21にクローズされました