[iOS/Swift] Modal Style과 LifeCycle

2023. 9. 7. 17:26·Study/🚨 TroubleShooting

 

컬렉션 뷰의 셀을 선택한 후 좋아요 버튼 해제 시 DB에서 삭제되어 변경된 데이터가 컬렉션 뷰에 업데이트 되도록 구현하고 있었다.

Untitled.png

버튼 클릭 후 데이터가 삭제후 dismiss를 수행하도록 구현하였다.

뷰가 다시 나타나려면 viewWillAppear()가 호출 될 것이고, 뷰가 갱신되어 깔끔하게 정리 될 컬렉션 뷰를 기대하였다..

Sep-06-2023_14-25-34.gif

삭제 쿼리가 정상 작동하는 것은 확인했는데 대체 왜 바로 reload가 수행되지 않을까?

결국 sos 요청 후 굉장한 깨달음을 얻게 되었다ㅠㅠ

viewWillAppear()에서 데이터가 잘 변경되었는지 확인해보려 출력시켜보니 viewWillAppear()가 호출되지 않고있었다.

그렇다면 뷰가 사라지긴 한건가?

viewDidDisappear()도 호출해보자

Untitled.pngSep-06-2023_14-35-11.gif

애초에 컬렉션 뷰가 사라지지 않았던 것이다.

nav.modalPresentationStyle = .overFullScreen 

modalPresentation 방식에 문제가 있었다.

🔎 ModalPresentation Style에 따른 Life Cycle

  • currentContext / fullScreen
  • overCurrentContext / overFullScreen

✔️ currentContext / fullScreen

Sep-06-2023_00-37-54.gif

화면 전환 시 viewDidDisappear()가 호출되고 dismiss시 viewWillAppear()까지 호출 된 것을 확인할 수 있다.

✔️ overCurrentContext / overFullScreen

Sep-06-2023_00-35-00.gifSep-06-2023_00-36-20.gif

overCurrentContext와 overFullScreen 방식으로 present 후 dismiss하면 호출되지 않는다.

 

❓ 차이가 무엇일까?

overCurrentContext와 overFullScreen은 기존 뷰를 유지한 상태에서 새로운 뷰를 올려놓은 채 보여주는 것이기 때문에 기존 뷰가 사라지지 않는다. 때문에 viewDidDisappear()도 viewWillAppear()도 불리지 않는 것이다.

기존 뷰가 뒤에 남아있기 때문에 뷰에 alpha값을 설정할 수도 있다!

 

currentContext와 fullScreen은 뷰가 present할 때 컨텍스트에서 뷰를 날린다. 때문에 viewDidDisappear()와 viewWillAppear()가 모두 호출되는 것이다.

 

modalPresent 방식도 잘 모르는 채 그냥 overFullScreen 사용하였더니 발생한 오류였다.

fullScreen으로 전환하였더니 해결이 되었다.

 

 

 

뭐가 다른지 의문만 가지고 제대로 공부하지 않은 나의 탓이었다🥲

삽질.. 아니 학습했다^^

'Study > 🚨 TroubleShooting' 카테고리의 다른 글

Codable TypeMismatch 오류  (0) 2023.12.01
[iOS/RxSwift] API 통신에서 Single과 Observable  (0) 2023.11.14
테이블 뷰 셀 오류  (0) 2023.08.03
'Study/🚨 TroubleShooting' 카테고리의 다른 글
  • Codable TypeMismatch 오류
  • [iOS/RxSwift] API 통신에서 Single과 Observable
  • 테이블 뷰 셀 오류
김졀니
김졀니
🍎 iOS 개발
  • 김졀니
    졀니의 개발 공부✨
    김졀니
  • 전체
    오늘
    어제
    • 분류 전체보기
      • iOS
        • Swift
        • UIKit&SwiftUI
        • RxSwift&Combine
        • WWDC
      • Study
        • 🚨 TroubleShooting
        • 🌱 SeSAC
  • 블로그 메뉴

    • 홈
    • Github
  • 인기 글

  • 최근 글

  • 태그

    displayPriority
    wwdc23
    인앱리뷰
    pointfree
    위치 권한
    Swift
    actor
    이미지 캐싱
    swiftdata
    CLLocation
    Sendable
    @PropertyWrapper
    의존성 주입
    clipstobounds
    Realm
    FileManager
    동시성프로그래밍
    mapkit
    observable
    kingfisher header
    layoutIfNeeded
    ios
    mainactor
    OperationQueue
    traits
    Drawing Cycle
    RxSwift
    concurrency
    swift concurrency
    ReactorKit
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.3
김졀니
[iOS/Swift] Modal Style과 LifeCycle
상단으로

티스토리툴바