2017-11-17 17 views
-1

데이터 세트가 너무 크고 테이블보기에 데이터를 표시하려고합니다. 최상의 접근 방법은 무엇이되어야합니까?대규모 데이터 세트의 경우 cellForRowAtIndexPath에서 웹 서비스를 호출하는 것이 좋습니다.

첫 번째 접근 - 나는 cellForRowAtIndexPath에서 API를 호출합니다. 이것은 스크롤 할 때마다 요청을 반복하여 서비스를 반복해서 반복하는 것을 의미합니다. 데이터를 캐시해도 좋지만 여전히 최선의 방법이라고 생각합니다.

두 번째 방법 - 먼저, 로컬에 모든 데이터를 저장하고 보여. 이것은 내부 스토리지를 더 많이 차지한다는 것을 의미합니다.

어떤 접근 방식이 더 좋습니까? 아니면 더 좋은 접근 방식이 있습니까?

+0

일부 로컬 배열에 20/30/40 개체, 트위터 등으로 데이터를 다운로드합니다. 행의 셀은 아무것도 다운로드하지 않아야합니다. – JuicyFruit

+0

@ Piyush Vaish 포인트 1은 좋은 생각이 아닙니다. 포인트 2, 데이터를 로컬로 저장하는 요구 사항이 있다면, API 호출을하고 모델에 데이터를 저장하는 다른 클래스를 만들 수 있습니다. –

+0

그러한 요구 사항은 없습니다. 대용량 데이터 세트가있는 경우 페이 스북 피드를 예로 들면 모든 물건을 다운로드하고 표시하는 데 많은 시간이 걸릴 것이고 분명히 메모리 문제가 있음을 알 수 있습니다. –

답변

0

API가 페이지 매김을 지원하는지 여부에 따라 어떤 접근 방식을 사용합니까? API가 페이지 매김을 지원하지 않는다면 다른 솔루션을 사용하지 않고 한 번에 모든 것을 가져 와서 tableView에 표시합니다. 당신의 API가 페이지 매김을 지원하는 경우

, 당신은의 다음 페이지를 가져 오지 사용자가 테이블/collectionView의 하단에 스크롤 할 때 확인하고 웹 서비스를 실행하는 데 ViewDidLoad의 첫 번째 페이지를로드 한 후 scrollViewDidScroll 대리자를 구현하기 위해 전화를 걸 수 있습니다 응답. 서버가 빈 배열로 응답 할 때까지 계속됩니다.

다음은있는 tableView/collectionView

extension ViewController : UIScrollViewDelegate { 
    func scrollViewDidScroll(_ scrollView: UIScrollView) { 
     let bottomEdge = scrollView.contentSize.height + scrollView.contentInset.bottom - scrollView.bounds.height 
     if scrollView.contentOffset.y >= bottomEdge { 
      //make a webservice call now 
     } 
    } 
} 
0

너무 많은 연결을 만들기의 사용자에 도달 끝이 좋은 생각이 아닌 경우 결정의 사용을 만들 수있는 간단한 scrollViewDidScroll 재정이다.

모든 항목을 가져와 몇 가지 항목에 대해 단일 페이지에 표시해야합니다.

하지만 너무 많은 데이터가 있기 때문에 2 가지 옵션이 있습니다. 그것들을 결합하는 것이 3 번째 옵션으로 더 좋습니다.

  1. 데이터를 표시하지 않고 검색 창을 구현하고 검색 텍스트로 데이터를 요청하십시오. 이제 검색 텍스트에 따라 데이터의 하위 집합을 요청했습니다. 응답이 이미지 링크가있는 경우, 당신은 다운로드해야

  2. 요청 데이터 (첫 번째 예를 들어, 20)와 imlement load more 버튼의 하위 집합 또는 pagination.

(대신 버튼의 당신이있는 ScrollView 너무 대리자를 사용할 수 있습니다) cellForRowAtIndexpath의 이미지. 이전에 다운로드를 시작하면 사용자가 너무 많이 기다립니다.