Swift whose view is not in the window hierarchy 해결법

2022. 11. 16. 16:52·개발 공부 일기장/iOS Develop

개요

회사에서 iOS 개발하면서 두개의 앱을 연동해서 앱 스위칭하면서 왔다갔다하는 작업이 있었는데 스위칭하는 동시에 팝업 띄우려니

자꾸 Attempt to present <> on <> (from <>) whose view is not in the window hierarchy. 

오류가 나서 거의 반나절을 이리저리 보다가 해결함.

다른 포스트들을 참고하니 viewDidLoad(), viewWillAppear()등 스토리보드 생명주기에 관한 글만 있는데 해당사항이 없는

글이라 외국 포스트들을 참고하다가 해결하게 됨.

 

원인

앱을 스위칭하자마자 서버에 상태체크를 한번하고 그에 맞는 팝업을 띄워줘야하는데 자꾸 저 에러가 나면서 뷰가 무시됨..

대충 앱 특성상 뷰가 스택처럼 쌓이고 사라진다는점을 알고 있었기 때문에 그에 맞춰서 검색을 해봄

 

해결법

외국 포스트를 보다가 최상위 뷰컨트롤러에서 present를 하면 된다고 하는 댓글을 발견해서 바로 해결법을 찾아봄

extension UIApplication {
    class func topViewController(base: UIViewController? = UIApplication.shared.keyWindow?.rootViewController) -> UIViewController? {
        if let nav = base as? UINavigationController {
            return topViewController(base: nav.visibleViewController)
        }
        if let tab = base as? UITabBarController {
            if let selected = tab.selectedViewController {
                return topViewController(base: selected)
            }
        }
        if let presented = base?.presentedViewController {
            return topViewController(base: presented)
        }
        return base
    }
}

그러다가 최상위뷰컨트롤러를 상황에 맞게 찾아주는 extension을 발견하게 해서 적용한 뒤

UIApplication.topViewController()!.present(popupVC, animated: false)

위와 같이 스토리보드를 호출하니 해결됨.. 반나절의 삽질 끝

'개발 공부 일기장 > iOS Develop' 카테고리의 다른 글

Swift를 스프링처럼 사용하기 - 1편 Swift의 인터페이스 Swift Protocol에 대해 알아보자!  (0) 2023.06.16
Swift를 스프링처럼 사용하기 - 0편 Swift를 어떻게 Spring처럼 사용해?  (0) 2023.06.15
SwiftUI TextField Clear button - 텍스트 필드 내용 지우기, 초기화  (0) 2023.05.31
Swift dump 함수에 대하여 :: 디버깅 하는 법  (0) 2022.12.04
Swift 명명 규칙 :: Swift 함수, 클래스 이름 짓기  (0) 2022.12.04
'개발 공부 일기장/iOS Develop' 카테고리의 다른 글
  • Swift를 스프링처럼 사용하기 - 0편 Swift를 어떻게 Spring처럼 사용해?
  • SwiftUI TextField Clear button - 텍스트 필드 내용 지우기, 초기화
  • Swift dump 함수에 대하여 :: 디버깅 하는 법
  • Swift 명명 규칙 :: Swift 함수, 클래스 이름 짓기
Archan
Archan
개발자/해커 Archan의 블로그입니다
  • Archan
    Archan의 알찬 Write Up
    Archan
  • 전체
    오늘
    어제
    • 분류 전체보기 (82)
      • Hacking (18)
        • CTF Write Up (1)
        • Pwnable.kr (1)
        • [Toddler's Bottle] (11)
        • Network (0)
        • Pwnable Tips (3)
        • 실전 해킹 (2)
      • 개발 공부 일기장 (64)
        • PHP Develop (2)
        • Android Develop (1)
        • HTML&CSS (2)
        • Tips (4)
        • iOS Develop (7)
        • 방화벽 (2)
        • C Develop (0)
        • Linux Develop (1)
        • DBMS Develop (5)
        • Basic Develop (4)
        • Java Develop (5)
        • 생각 정리 (18)
        • DevOps (1)
        • 사이드 프로젝트 (12)
        • Algorithm (0)
        • 컴퓨터공학 (0)
        • 시스템 설계 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 포트폴리오
  • 공지사항

  • 인기 글

  • 태그

    SWIFT
    pwn wargame
    사이드 프로젝트
    Swift를 스프링처럼 사용하기
    Spring
    개발자
    스위프트
    성공적
    토이 프로젝트
    객체지향
    리눅스
    백엔드
    ios
    동아리 관리 프로젝트
    협업
    스프링
    동아리 관리 웹
    Linux
    포너블
    root
    pwnable.kr
    성공적:D
    초보
    왕초보
    오늘도
    ubuntu
    해킹
    슬축생
    포너블 워게임
    Spring Boot
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
Archan
Swift whose view is not in the window hierarchy 해결법
상단으로

티스토리툴바