작성
·
27
·
수정됨
0
안녕하세요, 페이지네이션 부분 오류가 있는 것 같아 질문 드립니다!
UserListViewController에서 'bindView()' 메서드에서 페이지네이션을 구현하고 있습니다.
강의 내용과 같이 구현하면, 즐겨찾기 유저를 여러 명 추가 후 다시 앱을 실행했을 때, Core Data에 저장된 즐겨찾기 유저 목록은 그대로 표시됩니다. 즐겨찾기 목록 테이블뷰를 맨 밑으로 스크롤 하면 422 서버에러가 발생합니다.
테이블뷰의 맨 밑으로 스크롤 하면 바인딩 되어 있던 tableView의 prefetchRows(또는, willDisplayCell)의 코드가 실행되게 되고 fetchMore의 값이 변경되어 fetchUser()가 실행되어 output의 값이 변경되는데, 이때 텍스트필드 값은 비어있기 때문에 데이터를 받아오는 과정에서 422 에러가 발생하는 것이라 예상됩니다.
아래 코드와 같이 row를 받아 올 때, self?.tabButtonView.selectedType.value == .api
를 추가하여 selectedType
이 api 타입일 때만 fetchMore의 값이 변경되도록 수정하면 422 에러가 발생하지 않습니다.
제가 생각한 오류의 원인과 해결 과정이 올바른지 질문드립니다!
tableView.rx.willDisplayCell.bind {[weak self] (cell, indexPath) in
guard let row = self?.tableView.numberOfRows(inSection: 0), self?.tabButtonView.selectedType.value == .api else {return}
if indexPath.item >= row - 1 {
self?.fetchMore.accept(())
}
}.disposed(by: disposeBag)
}
답변 2
0
0
안녕하세요, 인프런 AI 인턴입니다.
이수현 님께서 질문해 주신 페이지네이션과 관련하여, 스크롤 하단에서 422 서버 에러가 발생하는 문제를 살펴보겠습니다. 422 에러는 일반적으로 클라이언트가 서버에 잘못된 데이터를 전송할 때 발생합니다. 이 경우, 텍스트 필드 값이 비어 있거나 잘못된 값으로 인해 서버에서 예상하지 못한 요청이 오기 때문에 발생할 수 있습니다.
이 문제를 해결하기 위해, selectedType
이 .api
일 때만 서버에 데이터를 요청하도록 조건을 추가하신 방식은 합리적인 접근입니다. 이렇게 하면, 불필요한 서버 요청으로 인해 발생할 수 있는 에러를 예방할 수 있습니다.
추가적으로 고려할 수 있는 사항은 다음과 같습니다:
입력값 검증: 서버 요청 전, 필요한 입력값들이 올바른지 충분히 검증해야 합니다. 빈 문자열이나 잘못된 값이 전송되지 않도록 해야 합니다.
API 호출 제어: 스크롤링 중에 너무 많은 요청이 발생하지 않도록 요청 자체를 제한하거나, 특정 조건을 만족할 때만 추가 데이터 요청을 하도록 할 수 있습니다.
에러 처리 로직 강화: 서버에서 422 에러가 발생할 경우 사용자에게 알맞은 에러 메시지를 표시하거나, 잘못된 데이터를 자동 수정하는 등의 방법을 고려할 수 있습니다.
위 방법들이 문제 해결에 도움이 되길 바라며, 관련된 강의 질문 게시물을 참고하시면 더욱 상세한 정보를 얻으실 수 있습니다. 아래 링크를 통해 유사 문제와 관련된 토론을 확인해 보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.