🎯 Trouble Shooting
[ 1. Duplicate item StoreInfo ]
error Message
Thread 1: Fatal error: Duplicate item StoreInfo(displayName: "버거킹 신림역점",
primaryTypeDisplayName: "패스트푸드점", formattedAddress: "대한민국 서울특별시 관악구 서원동 86-42",
latitude: 37.482641, longitude: 126.93015550000001, rating: 4.1,
googleMapsUri: "https://maps.google.com/?cid=4429034559381451748",
userRatingCount: 102, photosNames: "https://lh3.googleusercontent.com/place-photos/
AJnk2cwFntQeWbiEOlXEdIUyDF7SEZn0av4BCY-w-QEMXZ5oljiFXQAHpvJs23T2RAtOLsTCyJqMIavJmu9dEgZqZQakvA0Y2
원인 : 이 에러는 StoreInfo 타입의 객체가 중복되어 Set이나 Dictionary 등 고유성을 요구하는 컬렉션에 삽입되려고 할 때 발생합니다. 즉, StoreInfo가 Equatable 및 Hashable을 구현하고 있고, 동일한 정보를 가진 객체가 이미 컬렉션에 존재할 때 크래시가 납니다.
해결 : StoreSection의 identity를 가게 이름에서 UUID로 설정
extension StoreInfo: IdentifiableType {
var identity: String { return UUID().uuidString } // 고유 식별자로 가게명 사용
}
struct StoreSection {
var identity: String
var items: [StoreInfo]
init(items: [StoreInfo]) {
self.identity = UUID().uuidString
self.items = items
}
}
👨🏻💻 오늘의 작업
[ 1. 음식 키워드를 Home View에서 받아와서 Detail Reactor에서 사용 ]
1.1 음식 키워드를 목데이터에서 Home View에서 받아온 키워드로 사용
homeVC
reactor.pulse(\.$pushDetailViewWithData)
.compactMap { $0 }
.bind(onNext: {
print("다음 뷰 push, data: \($0.keywords), \($0.title)")
let reactor = DetailReactor(sectionData: $0)
let vc = DetailViewController(reactor: reactor)
self.navigationController?.pushViewController(vc, animated: true)
})
.disposed(by: disposeBag)
homeVC에서 DetailVC로 SectionData를 넘겨줌
detailVC
typealias Reactor = DetailReactor
let reactor: DetailReactor
init(reactor: DetailReactor) {
self.reactor = reactor
super.init(nibName: nil, bundle: nil)
}
detailVC에서 init 설정
detailReactor
var selectedKeywords: [String] // home에서 전달받는 검색 키워드
var title: String
init(sectionData: SectionData) {
self.selectedKeywords = sectionData.keywords
self.title = sectionData.title
self.initialState = State()
}
// homeVC에서 받아온 키워드 사용
let firstRequest = fetchStoreInfosWithImages(textQuery: selectedKeywords[0],
centerLat: centerLat,
centerLon: centerLon)
let secondRequest = fetchStoreInfosWithImages(textQuery: selectedKeywords[1],
centerLat: centerLat,
centerLon: centerLon)
homeVC에서 받아온 setcionData를 detailReactor에서 초기 설정
네트워크 통신 시 homeVC에서 받아온 키워드 사용
1.2 내비게이션 바 title 제목을 목데이터에서 HomeView에서 받아온 제목으로 사용
detailVC
override func viewDidLoad() {
super.viewDidLoad()
self.title = reactor.title // 네비게이션 바 타이틀 설정
}
detailVC에서 네비게이션 바 타이틀을 homeVC에서 받아온 타이틀로 사용
1.3 시뮬레이터 확인
'스파르타 코딩 클럽 - iOS 스타터 6기 > 본 캠프' 카테고리의 다른 글
69. 스파르타 코딩 클럽 - 최종 팀 프로젝트 #11 (0) | 2025.06.20 |
---|---|
68. 스파르타 코딩 클럽 - 최종 팀 프로젝트 #10 (0) | 2025.06.19 |
66. 스파르타 코딩 클럽 - 최종 팀 프로젝트 #8 (1) | 2025.06.17 |
65. 스파르타 코딩 클럽 - 최종 팀 프로젝트 #7 (1) | 2025.06.16 |
64. 스파르타 코딩 클럽 - 최종 팀 프로젝트 #6 (1) | 2025.06.13 |