본문 바로가기
iOS/swift

[Swift] Firestore 데이터는 불러오는데 마커가 사라진다면? (해결 방법 정리)

by 23g 2025. 2. 18.

🧐 문제 상황

Firebase Firestore에서 흡연 구역 데이터를 가져와 리스트에 표시하는 기능을 추가했는데, 리스트는 정상적으로 출력되지만 지도에 마커가 사라지는 문제 발생!

🔍 증상

  • 앱 실행 후 초기 화면에서 마커가 정상적으로 표시됨
  • 리스트 화면에서 데이터를 확인 후, 다시 지도로 돌아오면 모든 마커가 사라짐
  • smokingAreas.count를 확인하니 데이터는 정상적으로 있음 (즉, Firestore에서 데이터는 정상적으로 가져옴)
  • 하지만 지도에는 마커가 표시되지 않음

🏷 원인 분석

📌 1. Firestore 데이터는 정상적으로 불러옴

먼저 SmokingAreaData.shared.smokingAreas를 출력해보니, Firestore에서 가져온 데이터는 정상적으로 존재함. 즉, 데이터가 사라진 것이 아니라 마커가 지도에 추가되지 않은 문제였음.

print(SmokingAreaData.shared.smokingAreas) // ✅ 정상적으로 데이터가 있음!

📌 2. 마커 추가 로직이 실행되지 않음

Firestore에서 데이터를 가져오는 fetchSmokingAreas() 함수는 정상적으로 실행되었지만, 마커를 다시 추가하는 코드가 실행되지 않음!

// Firestore에서 데이터를 가져오지만 마커를 다시 추가하지 않음!
FirestoreManager.shared.fetchSmokingAreas { smokingAreas in
    SmokingAreaData.shared.smokingAreas = smokingAreas // ✅ 리스트 업데이트
    // ❌ 마커를 다시 추가하는 코드가 없음!
}

📌 3. NMFMarker.mapView = mapView가 실행되지 않음

마커를 추가하는 markerManager.addMarkers()가 실행되지 않았기 때문에, 기존 마커들이 지도에 반영되지 않음.


🚀 해결 방법

Firestore에서 데이터를 가져온 후 마커도 다시 추가!

Firestore에서 데이터를 가져온 후 markerManager.addMarkers()를 실행해서 지도에도 반영되도록 수정

🔹 수정된 loadMarkers() 코드

private func loadMarkers() {
    FirestoreManager.shared.fetchSmokingAreas { [weak self] smokingAreas in
        guard let self = self else { return }
        
        // ✅ 데이터를 가져온 후 마커 추가
        self.markerManager.addMarkers(for: smokingAreas, to: self.naverMapView.mapView)
    }
}

변경 후 동작

  • Firestore에서 데이터를 불러온 후, smokingAreas 리스트를 업데이트
  • 업데이트된 데이터를 기반으로 markerManager.addMarkers()를 호출하여 마커 추가
  • 지도에 다시 마커가 정상적으로 표시됨! 🎉

🛠 추가 디버깅 체크 리스트

🔹 1. markerManager.addMarkers() 내부에서 mapView에 마커가 추가되고 있는지 확인

marker.mapView = mapView // ✅ 이 코드가 실행되지 않으면 마커가 안 보임!

🔹 2. Firestore에서 데이터 가져오는 시간이 걸릴 수 있음

Firestore 데이터 로딩이 완료된 후에 마커가 추가되는지 확인!

FirestoreManager.shared.fetchSmokingAreas { smokingAreas in
    print("✅ Firestore에서 데이터 로딩 완료: \(smokingAreas.count)개")
}

🎯 결론

  • Firestore에서 데이터를 불러오면 리스트만 업데이트할 게 아니라 마커도 다시 추가해야 함
  • fetchSmokingAreas() 이후 markerManager.addMarkers()를 실행해야 마커가 정상적으로 보임!
  • marker.mapView = mapView가 빠지지 않았는지 확인!

이제 마커가 정상적으로 표시됨! 🚀🔥