찾다

 >  Q&A  >  본문

목표-c - iOS 개발에서 reloadData를 올바르게 사용하여 tableView 또는 collectionView를 새로 고치는 방법

최근에 이전에 작성했던 iOS 애플리케이션을 새로 고칠 때 간헐적으로 충돌이 발생하는 것을 갑자기 발견했습니다.
코드를 확인해보니 버그가 발견되었습니다. 버그가 발생하는 단계는 다음과 같습니다.

  1. 사용자가 새로 고치기 위해 테이블뷰를 아래로 내립니다.

  2. 데이터가 저장된 NSArray를 지웁니다.

  3. 네트워크 데이터를 가져온 다음 NSArray에 채웁니다.

일반적인 상황에서는 이 작업을 수행하는 데 문제가 없습니다.
그러나 사용자가 2단계와 3단계에서 테이블뷰를 드래그하면 즉시 충돌이 발생합니다.

이유를 분석해봤습니다. NSArray를 지울 때 tableView는 최신 데이터 수를 가져오기 위해 자동으로 numberOfItemsInSection을 호출하지 않습니다. 이 때 풀다운되면 tableview는 새로운 셀을 가져오기 위해 cellForItemAtIndexPath를 호출합니다. 0이면 cellForItemAtIndexPath 액세스 데이터가 배열 범위를 벗어납니다.

그래서 세 번째 단계 중간에 삽입된 두 번째 단계, 즉 원격 데이터를 얻은 후 NSArray를 지우고 이를 새로운 네트워크 데이터로 교체한 다음 reloadData 새로 고침을 조정하는 것에 대해 이야기하고 싶습니다.

그러나 여기에는 여전히 원래 버그가 있습니다. reloadData를 호출하기 전에 NSArray의 수가 tableView에서 얻은 numberOfItemsInSection과 다릅니다. 단지 시간 간격이 이전보다 짧아졌을 뿐입니다.

tableView에서 데이터를 업데이트하는 방법을 전문가에게 물어봐도 될까요? 100% 안전을 달성하는 방법.

我想大声告诉你我想大声告诉你2809일 전676

모든 응답(1)나는 대답할 것이다

  • 迷茫

    迷茫2017-05-02 09:24:52

    데이터가 변경되는 한 tableView를 새로 고쳐야 합니다
    내용을 지우고 싶으더라도 작업이 끝나면 새로 고칠 수 있습니다

    회신하다
    0
  • 취소회신하다