iOS

【Swift】whose view is not in the window hierarchyで画面遷移に失敗する

投稿日:

はじめに

こんにちはsuzukiです。今回は備忘としてwhose view is not in the window hierarchyというデバッグ中に表示されるエラーについて、簡単にまとめて行きたいと思います。

エラーの概要

ViewWillAppearとかViewDidLoadの描画中のタイミングで画面遷移を行おうとした際に発生するエラー、
アプリはクラッシュ等は発生しないが、画面遷移がされない。

今回出会った事象

上記のエラーは結構有名で、連続する画面遷移などを設計した際に発生するのですが、
今回出会った内容としてアプリのバックフォアのタイミングで下記のスレッドが動き発生していました。

スレッドA(A画面の処理)
→ A画面からB画面を表示

スレッドB(共通の処理)
→ 現在の画面を新規にA画面のインスタンスを生成して置き換える

という二つのスレッドがパラレルにA→Bの順番で呼ばれ発生しスレッドBの内容が行われていませんでした。
またスレッドBの処理はwhich is already presentingというエラーも併発しており、画面の状態がかなりぐちゃぐちゃになってしまっていました。

行った対応

今回の場合は下記の理由により
・スレッドAの処理を止めることが仕様上できない
・スレッドBの処理がアプリの処理として、優先されるべき
スレッドBの処理を行う際に画面Aと画面Bが表示されている場合は閉じたあと再度スレッドBの処理を行い、画面Aを表示しました。

さいごに

今回、見慣れたエラーの内容ですが、異なるスレッドで画面の遷移がエラーが重複していたため、原因の特定にかなり時間がかかりました。こういうバグが発生する状況を改善させないためにはどのように開発していくべきなのか、シンプルな作りとはなんなのか、と改めて考え直したい出来事でした。

おすすめ書籍

[改訂新版]Swift実践入門 ── 直感的な文法と安全性を兼ね備えた言語 WEB+DB PRESS plus 詳解 Swift 第4版 [改訂新版]Swiftポケットリファレンス (POCKET REFERENCE)

blog-page_footer_336




blog-page_footer_336




-iOS
-

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

【iOS14】他のアプリを簡単に紹介できるSKOverlay

1 はじめに2 SKOverlayとは3 実装3.1 表示位置3.2 非表示3.3 delegate4 さいごに5 おすすめ書籍 はじめに 今回はiOS14から使用できるようになった、SKOverla ...

swift

【Swift】switch文でタプルを使う

1 はじめに2 タプルとは3 タプルを使うswitch文について4 テストコード5 さいごに はじめに こんにちはsuzukiです。本日で投稿が2回目となります。 今後ともよろしくお願い致します。 最 ...

【Swift】FabricからFirebase CrashLyticsのアップデート

1 はじめに2 FabricとFirebase3 FabricからFirebase CrashLyticsのアップデート方法3.1 Fabricの削除3.2 Firebase CrashLyticsの ...

[Swift4]ライブラリをやめてCodableでJSONを取り扱う

1 はじめに2 Codableとは2.1 Codable使いたい理由3 実装3.1 とりあえずJSONを読み込む3.2 ObjectMapperの場合3.3 ネスト配列に対応してみよう3.4 JSON ...

swift

[Swift]UITableViewのカスタムセルをStoryboadで

1 はじめに1.1 前提条件2 実装2.1 Storyboadの準備2.2 UITableViewCellクラスの準備2.3 カスタムセルの表示3 さいごに はじめに こんにちは、nukkyです。 以 ...

フォロー

blog-page_side_responsive

2021年4月
 123
45678910
11121314151617
18192021222324
252627282930  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。