-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PostSearch 관련 에러 고치는중.. #173
Comments
🙏🏻 문제“ph” 검색 → 작성자: 5개, 술 태그: 0개, 음식 태그: 0개 작성자로 들어가서 postDetailView의 foodTags 보고 돌아옴 검색창 작성자: 5개, 술태그: 0개, 음식 태그: 1개 로 음식 태그가 늘어나버림 🔥 원인먼저 postView의 PostInfo 뷰에서 검색을 하게 되면 3개의 배열에 검색 결과를 필터링해서 담는다
1 or 2 or 3을 통해 PostDetailView로 넘어가 음식태그를 눌러 NavigationPostView로 넘어갈 경우 위의 코드 getSearchedPosts 메서드에서 음식태그에 대해 파이어베이스에서 또 검색을 하고 그 검색결과를 위에서 언급한 3개의 배열중 음식태그 검색 배열에 같이 append해버리는 바람에 Navigation에서 back해서 검색결과 List로 가면 음식태그 검색 결과에 1개가 추가되어버리는 것이다. 💥 해결흐음 어떻게 해야할까… |
🙏🏻 문제계속 음식 태그로 타고 타고 가다보면 전체 Post가 배열에 추가되어 보여진다 🔥 원인💥 해결 |
|
// Post 실시간 처리로 인한 코드 주석처리
// await postViewModel.fetchFirstPost() |
.task {
if postViewModel.posts.isEmpty {
await postViewModel.fetchFirstPost() // 첫 술상 페이지 진입 시 Post 패치
await postViewModel.startListening() // Post 실시간 Listener 구독 시작
}
} |
파이어베이스 PostView를 위한 실시간 처리
func startListening() async {
listener = db.collection(postCollection).addSnapshotListener { querySnapshot, error in
guard let snapshot = querySnapshot, error == nil else {
print("Error fetching snapshots: \(error!)")
return
}
snapshot.documentChanges.forEach { diff in
do {
// 게시글이 추가된 경우, 술상 정렬타입이 인기순이라면 배열의 0번째에 추가
if diff.type == .added, self.selectedSegmentIndex == 1 {
let postField = try diff.document.data(as: PostField.self)
self.posts.insert(Post(postField: postField, likedUsersID: []), at: 0)
}
// 게시글이 수정된 경우, 해당 게시글이 배열에 존재하면 해당 인덱스에 수정사항 반영
if diff.type == .modified {
let postField = try diff.document.data(as: PostField.self)
if let index = self.posts.firstIndex(where: { $0.postField.postID == postField.postID }) {
self.posts[index].postField = postField
}
}
// 게시글이 삭제된 경우, 해당 게시글이 배열에 존재하면 배열에서 삭제
if diff.type == .removed {
let postField = try diff.document.data(as: PostField.self)
if let index = self.posts.firstIndex(where: { $0.postField.postID == postField.postID }) {
self.posts.remove(at: index)
}
}
} catch {
print(error.localizedDescription)
}
}
}
} |
위의 문제를 해결하면 같이 해결된다 |
No description provided.
The text was updated successfully, but these errors were encountered: