티스토리 뷰

iOS

iOS) push 와 pop 시 ViewLifeCycle

hyun99999 2021. 7. 21. 17:31
728x90
반응형

push 와 pop 시 ViewLifeCycle

문제

  • viewDidLoad 에서 realm 에서 데이터를 가져와서 뷰에 뿌려주는 형식인데 이 경우 push 하고 pop 해서 뷰로 돌아올 경우 업데이트가 되지 않았다.

원인

  • push 할 경우에 view 가 사라지지만 메모리에는 남아있다는 것을 놓쳤다. 즉, viewDidLoad 는 한번만 호출되는데 notificationToken 을 viewDidLoad 에서 설정해주었던 것이 문제였다.

  • viewWillDisappear 에서 notificationToken 을 invalidate() 하기 때문에 뷰가 사라질 때 저장한 notificationToken 이 해제가 되었다.

  • 그 후에 push 된 뷰에서 db 를 수정하고 pop 해서 메인 뷰를 viewWillAppear 해주기 때문에 viewDidLoad 에서 설정해둔 reloadData() 가 실행되지 않았고 db 가 업데이트가 안되는 현상이 보여졌던 것이다.

  • push

  • pop

해결

viewWillAppear 에서 notificationToken 을 설정해서 pop 되어 뷰가 화면에 보여질 때 reloadData() 가 실행되도록 하였다.

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    realm = try? Realm()
    Lists = realm?.objects(ListModel.self)

    notificationToken = Lists?.observe { change in
        print("change: \(change)")
        self.tableView.reloadData()
    }
}

그렇다면 present 할때는?

  • present 할때는 정상적으로 업데이트가 가능하다. 이때는 뒤의 뷰가 사라지지 않아서 deinit 역시 하지 않기 때문이다.
728x90
반응형
댓글
최근에 올라온 글
최근에 달린 댓글
글 보관함
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
링크
Total
Today
Yesterday