2016-08-30 3 views
0

검색 결과를 보여주는 테이블보기가 있습니다. 그것은 검색 할 모든 객체의 배열과 필터링 된 객체의 배열을 가지며, 테이블 뷰를 제공합니다.검색 결과가 충돌을 일으키는 테이블보기 업데이트

사용자가 검색 창에서 텍스트를 변경하면 필자는 필터링 된 배열을 업데이트하고 테이블보기를 다시로드합니다. 또한 각 셀에는 테이블보기 셀을 업데이트하기 전에 비동기 적으로 캐시되거나 다운로드되는 미리보기 이미지가 있습니다.

그래서, 테이블 뷰의 데이터를 다시로드 두 곳 tableView.reloadData()를 호출하는 필터링 방법,에, 필요한 이미지를 다운로드 할 경우, 주 스레드에서 self.tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimationStyle: .None)를 호출하는 cellForRowAtIndexPath,있다.

So. 나는 모든 종류의 문제를 겪고있다. 내가 얻은 세 가지 종류의 오류 :

  • 치명적 오류 : 색인이 범위를 벗어났습니다. 이것은 사용자가 검색 텍스트를 변경했기 때문에 cellForRowAtIndexPath이 비어있는 후 배열에서 내용을 가져 오려고 할 때 발생하는 것으로 보입니다.
  • 테이블보기에 오류가 있습니다. 예를 들어, 행 0을 34 행을 삽입하는 중 오류가 발생했습니다.이 일이 발생할 수 있습니다 확실하지 않지만 테이블 뷰를 인해 섹션이없는 경우 행을 삽입하는 것 같아요 배열이 비어 있습니다.
  • 내부 불일치 예외 :이 경우 어떤 추가 정보도 얻지 못합니다. 충돌이 발생합니다. 그래서 나는이 문제가 무엇 인지도 모릅니다.

어떻게 이런 문제를 피할 수 있습니까? 나는 지금이 오류를 없애기 위해 며칠 동안 노력했지만 아무것도 시도하지 않습니다. 누구든지 아이디어가 있습니까? 감사.

+0

문제를 더 잘 이해할 수 있도록 tableView 대리인 코드를 제공하십시오. –

답변

0

Reddit의 누군가에게 감사드립니다.

비동기식으로 다운로드 한 후 미리보기 이미지를 업데이트하기 전에 셀이 여전히 동일한 인덱스 경로 (또는 인덱스 경로)에 사용되고 있는지 확인해야했습니다. 또한 테이블 뷰를 요청하여 행을 그 색인 경로에서 셀의 이미지보기의 이미지를 설정합니다.

NSOperationQueue.mainQueue().addOperationWithBlock { 
    if indexPath == tableView.indexPathForCell(cell) { 
     cell.imageView?.image = downloadedThumbnail 
    } 
} 

I이 만든 이후이 행

NSOperationQueue.mainQueue().addOperationWithBlock { 
    tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .None) 
} 

:

기본적 cellForRowAtIndexPath 내부, 다운로드에 필요한 화상을 결정하고 비동기 이렇게 한 후,이로 전환 변화 나는 어떤 충돌도 얻지 않았다.