컬렉션 뷰의 셀을 선택한 후 좋아요 버튼 해제 시 DB에서 삭제되어 변경된 데이터가 컬렉션 뷰에 업데이트 되도록 구현하고 있었다.
버튼 클릭 후 데이터가 삭제후 dismiss를 수행하도록 구현하였다.
뷰가 다시 나타나려면 viewWillAppear()가 호출 될 것이고, 뷰가 갱신되어 깔끔하게 정리 될 컬렉션 뷰를 기대하였다..
삭제 쿼리가 정상 작동하는 것은 확인했는데 대체 왜 바로 reload가 수행되지 않을까?
결국 sos 요청 후 굉장한 깨달음을 얻게 되었다ㅠㅠ
viewWillAppear()에서 데이터가 잘 변경되었는지 확인해보려 출력시켜보니 viewWillAppear()가 호출되지 않고있었다.
그렇다면 뷰가 사라지긴 한건가?
viewDidDisappear()도 호출해보자
애초에 컬렉션 뷰가 사라지지 않았던 것이다.
nav.modalPresentationStyle = .overFullScreen
modalPresentation 방식에 문제가 있었다.
🔎 ModalPresentation Style에 따른 Life Cycle
- currentContext / fullScreen
- overCurrentContext / overFullScreen
✔️ currentContext / fullScreen
화면 전환 시 viewDidDisappear()가 호출되고 dismiss시 viewWillAppear()까지 호출 된 것을 확인할 수 있다.
✔️ overCurrentContext / overFullScreen
overCurrentContext와 overFullScreen 방식으로 present 후 dismiss하면 호출되지 않는다.
❓ 차이가 무엇일까?
overCurrentContext와 overFullScreen은 기존 뷰를 유지한 상태에서 새로운 뷰를 올려놓은 채 보여주는 것이기 때문에 기존 뷰가 사라지지 않는다. 때문에 viewDidDisappear()도 viewWillAppear()도 불리지 않는 것이다.
기존 뷰가 뒤에 남아있기 때문에 뷰에 alpha값을 설정할 수도 있다!
currentContext와 fullScreen은 뷰가 present할 때 컨텍스트에서 뷰를 날린다. 때문에 viewDidDisappear()와 viewWillAppear()가 모두 호출되는 것이다.
modalPresent 방식도 잘 모르는 채 그냥 overFullScreen 사용하였더니 발생한 오류였다.
fullScreen으로 전환하였더니 해결이 되었다.
뭐가 다른지 의문만 가지고 제대로 공부하지 않은 나의 탓이었다🥲
삽질.. 아니 학습했다^^
'iOS > 🚨 오류 그리고 해결' 카테고리의 다른 글
Codable TypeMismatch 오류 (0) | 2023.12.01 |
---|---|
[iOS/RxSwift] API 통신에서 Single과 Observable (0) | 2023.11.14 |
[iOS/Swift] search bar 에 테두리와 그림자 동시 적용하기 - clipsToBounds (0) | 2023.10.01 |
테이블 뷰 셀 오류 (0) | 2023.08.03 |
멀고도 험한 AutoLayout 설정의 길 (0) | 2023.08.02 |