코드

LazyLodingProblemInCollectionVIew.zip

업데이트코드 : https://github.com/hrjy6278/ios-open-market/tree/step2ScrollLodaing

문제

  1. 왜 collectionView(cellForItemAt) 가 nil인 경우가 생기는가?

    Screen Shot 2021-08-25 at 23.40.16.png

  2. LazyLoding 활동학습 시간엔 잘 작동되던 indexPath비교 방법이 왜 이번엔 의도한 대로 작동하지 않는 것인가?

    Simulator Screen Recording - iPhone 12 - 2021-08-25 at 23.54.19.mp4

원인

1번 문제의 원인

: cell이 아직 view에 그려지지 않았다면 collectionView(cellForItemAt) 의 결과는 nil 이기 때문

2번 문제의 원인

  1. tableView(cellForRowAt)메소드와 달리 collectionView(cellForItemAt) 는 셀이 뷰에 보이지 않아도 미리 호출됨 (+ 스크롤 하는 경우에 한정)

<aside> ⭐ 1.뷰에 아직 셀이 보이지 않는데 cellForItemAt 요청이 들어감

2.하지만 이미 이미지에 대한 요청이 들어가서 이미지 데이터를 가져옴

3.등록하려고 봤는데 셀이 안 그려진 상태라서 반영을 못하고 불러온 데이터는 사라짐

⇒ 즉 셀이 화면에 그려지기 전에 collectionView(cellForItemAt) 가 미리 호출되고 있음 → 호출 후 이미지가 도착 → 셀이 화면에 없음(이 때의 인덱스패스비교하면 당연히 nil(화면에 없으니까)) → 이미지가 날라감

</aside>

🌟 예시 🌟