본문 바로가기
❗️Error

[Firebase iOS] addSnapshotListener 여러번 호출되는 에러 해결하는법(Detach Listener)

by Fomagran 💻 2021. 2. 9.
728x90
반응형

 

안녕하세요 Foma 입니다!

오늘은 Firestore에서 addSnaptshotListener를 다룰때 주의해야할 점에 대해서 적어보려고 합니다.

 

addSnapshotListener를 사용할때 여러번 호출되는 경우인데요.

 

데이터가 바뀌었을때 딱 한번만 호출되게 하는 방법에 대해서 알아볼게요~


다음과 같이 addSnapshotListener를 사용하였을때 "listener called"라고 출력되게 해보겠습니다.

아래와 같이 listener called가 매우 많이 호출되는데요.

이것은 viewDidLoad가 실행되면 실행되는만큼 데이터가 바뀌었을때 배로 출력되게 됩니다.

 

왜 그럴까요?

 

addSnapshotListener는 말 그대로 SnapshotListener를 추가하는 것입니다.

 

그러므로 viewDidLoad가 될때마다 SnapshotListener가 추가되어 해당 주소의 데이터베이스의 데이터가

 

바뀔때 모든 추가된 addSnapshotListener가 실행되는 것이죠.


Solution

 

이것을 어떻게 더 추가되지 않게 혹은 하나만 추가할수 있을까요?

 

바로 addSnapshotListner를 지워주는 것입니다.

 

예를 들어 viewDidLoad 에서 addSnapshotListener를 추가해주었다면

 

viewWillDisappear 등 뷰가 사라질때 addSnapshotListner를 지워주는 것이죠.

 

먼저 리스너를 담아줄 변수를 하나 만들어줍니다,

그리고 다음과 같이 리스너 변수에 아래와 같이 addSnapshotListener를 사용한 주소를 넣어줍니다.

마지막으로 뷰가 사라질때 listener를 삭제해주면 리스너가 여러개 달리지 않고 뷰가 로드될때 딱 하나만 달릴수 있는거죠!!


Reference

 

 

Firestore onSnapshot() method fires multiple times

I have a vue-cli-4 app with multiple routes and vuex. Firestore database has been connected successfully - my app immediately reflects modifications applied to DB from Firestore console. Strange

stackoverflow.com

 

 

Cloud Firestore로 실시간 업데이트 가져오기  |  Firebase

onSnapshot() 메서드로 문서를 수신 대기할 수 있습니다. 사용자가 제공하는 콜백이 최초로 호출될 때는 단일 문서의 현재 내용으로 문서 스냅샷이 즉시 생성됩니다. 그런 다음 내용이 변경될 때마

firebase.google.com

728x90
반응형

댓글