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


関連記事

UIWebViewからWKWebViewへの移行

1 はじめに2 ターゲットとなるUIWebViewで行なっていること3 URLへのアクセス4 ローカルHTMLの読み込み5 ページを戻す、進める6 ページの読み込み開始時や終了時に処理を行う(dele ...

swift

Swift3 + Alamofire4 + Unbox2.4を使ってJSONをパースする

1 はじめに1.1 前提条件1.2 完成形2 モデルの作成3 APIクラスの作成4 ViewControllerの作成4.1 Delegateの指定4.2 TableViewの設定4.3 Search ...

UnityのiOSネイティブをSwiftで書く

1 はじめに2 UnityのiOSネイティブとは?3 今回作るもの4 必要な構成5 unity-swiftの導入6 必要な機能の実装6.1 Swiftクラスの作成6.2 Objective-C++でU ...

swift

[Swift4]UITextViewにプレースホルダをつける

1 はじめに1.1 前提条件2 実装3 さいごに はじめに こんにちは、nukkyです。 UITextFieldにはプレースホルダが標準で用意されていますが、UITextViewには用意されていません ...

swift

[Swift]PDFKitでPDFの表示

1 はじめに1.1 前提条件2 PDKitの概要3 実装3.1 PDFの表示4 さいごに はじめに こんにちは、nukkyです。 以前、PDFKitを使わないでPDFを表示する方法を書きましたが、今回 ...

フォロー

blog-page_side_responsive

2021年4月
 123
45678910
11121314151617
18192021222324
252627282930  

アプリ情報

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