inflearn logo
강의

Course

Instructor

iOS Clean Architecture & MVVM: Complete Mastery of RxSwift

즐겨찾기 탭에서 페이지네이션 422 서버 에러

Resolved

234

tngus06739813

2 asked

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)
    }

ios swift 객체지향 mvvm 클린-아키텍처

Answer 2

0

dumveloper

오류가 있었군요 빨리 수정 하도록 하겠습니다

네 작성하신대로 탭 상태에 따라 필터를 걸어서 api 상태일때만 이벤트를 트리거 하면 됩니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다.

이수현 님께서 질문해 주신 페이지네이션과 관련하여, 스크롤 하단에서 422 서버 에러가 발생하는 문제를 살펴보겠습니다. 422 에러는 일반적으로 클라이언트가 서버에 잘못된 데이터를 전송할 때 발생합니다. 이 경우, 텍스트 필드 값이 비어 있거나 잘못된 값으로 인해 서버에서 예상하지 못한 요청이 오기 때문에 발생할 수 있습니다.

이 문제를 해결하기 위해, selectedType.api 일 때만 서버에 데이터를 요청하도록 조건을 추가하신 방식은 합리적인 접근입니다. 이렇게 하면, 불필요한 서버 요청으로 인해 발생할 수 있는 에러를 예방할 수 있습니다.

추가적으로 고려할 수 있는 사항은 다음과 같습니다:

  1. 입력값 검증: 서버 요청 전, 필요한 입력값들이 올바른지 충분히 검증해야 합니다. 빈 문자열이나 잘못된 값이 전송되지 않도록 해야 합니다.

  2. API 호출 제어: 스크롤링 중에 너무 많은 요청이 발생하지 않도록 요청 자체를 제한하거나, 특정 조건을 만족할 때만 추가 데이터 요청을 하도록 할 수 있습니다.

  3. 에러 처리 로직 강화: 서버에서 422 에러가 발생할 경우 사용자에게 알맞은 에러 메시지를 표시하거나, 잘못된 데이터를 자동 수정하는 등의 방법을 고려할 수 있습니다.

위 방법들이 문제 해결에 도움이 되길 바라며, 관련된 강의 질문 게시물을 참고하시면 더욱 상세한 정보를 얻으실 수 있습니다. 아래 링크를 통해 유사 문제와 관련된 토론을 확인해 보세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Singleton 관련 질문입니다.

0

8

1

코드 자료

0

15

2

질문있습니다

0

25

1

1번 문제 질문입니다.

0

31

1

음악플레이어 문제 중 코드질문

0

26

1

문제와 풀이4 문제점

0

40

2

문제와 풀이

0

23

1

문제풀이 시간마다 방향성

0

38

2

수강 기간 연장 문의

0

26

1

레이어드 아키텍처에서 도메인 중심 패키지 구조를 적용하거나 변화하는 시점이 있을까요?

1

39

2

수강연장부탁드려도될까요..

0

41

2

LobbyUIController의 백키가 사라졌는데 왜그런건가요?

0

40

2

무조건 타이틀 씬부터 시작해야하나요?

0

39

1

9장 상속 문제와 풀이 질문

0

36

1

Combine Playground 에서 실행 시

0

55

2

BaseUI, UIManager

0

50

3

프로젝트 완성본 문의

0

40

2

유즈케이스 프로토콜과 구현체의 분리 이유

0

227

2

NetworkManager의 tokenHeader 관련 질문 드립니다!

0

157

1

[클린 아키텍쳐] 로컬 Json 파싱

0

202

1

의존성 주입에 관하여 질문있습니다.

0

218

2

강의 자료는 어디서 받을수 있나요?

0

171

1

안녕하세요 페이지네이션 구현 강의 중 질문있습니다.

0

211

2

강의 질문있습니다.

0

169

1