【SwiftUI】画面遷移時にアラートが表示されない不具合

(2021/09/22 更新)

画面遷移時にアラートが表示されない不具合に遭遇したので、記録を残しておきます。

本件はiOS14.5でのみ発生する不具合です。iOS14以前およびiOS15以降では正しく動作します。

スポンサーリンク

環境

この記事の情報は次のバージョンで動作確認しています。

【Xcode】12.5RC
【Swift】5.4
【iOS】14.5
【macOS】Big Sur バージョン 11.1
スポンサーリンク

問題の現象

iOS14.5で次のコードを実行すると、アラートが表示されずにエラーログが出力されます。

エラーログ

スポンサーリンク

原因と対処方法

条件としてはList+navigationLinkで遷移した後に.onAppearでアラートを表示しようとすると発生します。
遷移した画面のViewの階層構造が作られる前にアラートを描画しようして失敗しているようです。
同じコードをiOS14.4で実行すると、アラートが表示されるので、iOS14.5でなんらかの変更があったと思われます。

対処として、次のようにアラートの表示部を非同期キューに入れてやると正常に動作します。

正常な動作

スポンサーリンク

参考リンク

この問題を解決する為にAppleのDeveloppers Forumに質問した内容です。
なお、記事中で「iOS4.5」となっているのは、「iOS14.5」の間違いです。(^^;

Problem with alert in iOS4.5 | Apple Developer Forums
スポンサーリンク

あわせて読みたい記事

(アーカイブ)【SwiftUI】アラートの使い方(alert)
(2020/8/13 更新) 本記事の説明はiOS14以前の使用方法です。iOS15以降の情報はこちらの記事を御覧ください。 ユーザーに確認を促すアラートダイアログを表示する、.alert()の使い方について解説します。
【SwiftUI】Listの使い方
(2022/03/09 更新) Listはデータの一覧表示をするのに適したViewです。 画面に収まらない量の場合はスクロール表示になるなど、UIKitのUITableViewに似ていますが、はるかに簡単に使えます。 ListはForEac...
(アーカイブ)【SwiftUI】NavigationViewでの画面遷移
(2020/11/8 更新) 本記事で使用しているNavigationViewはiOS16以降では非推奨となっています。 最新の情報はこちらの記事を御覧ください。 NavigationView配下での画面遷移について解説します。