2016-07-06 4 views
2

나는 EXEC_BAD_ACCESS 오류를 해결하기 위해 고심하고 있습니다. 다음 코드는 :EXEC_BAD_ACCESS dispatch_async에서 셀 내용을 채우는 중

// Update the cell 
dispatch_async(dispatch_get_main_queue(), { 
    let cell = collectionView.dequeueReusableCellWithReuseIdentifier("customCell", forIndexPath: indexPath) as! CustomCollectionViewCell // crash here 
    cell.image.image = image 
    if(collectionView.numberOfItemsInSection(0) > indexPath.row) { 
     self.collectionView.reloadData() 
    }    
}) 

코드는 비동기 NSURLSession.dataTaskWithRequest로부터 응답을 수신 한 후 collectionViewCell에 화상을 기입하도록 설계된다.

let cell = 라인에서 충돌이 발생합니다. 왜냐하면 (내가 믿기 때문에) collectionPath의 내용을 변경했기 때문에 indexPath가 더 이상 존재하지 않기 때문입니다. 나는 그것을 확인하는 방법을 잘 모르겠다.

나는 if let cell =의 라인을 따라 뭔가 일할 것이라고 생각했지만, 나는 그것이 어떻게 작동하는지 잘못 이해했다고 생각한다. 그리고 다른 게시물을 읽는 것으로부터 코드를 try/catch 블록에 넣을 수 없음을 알 수 있습니다.

아이디어가 있으십니까? 미리 많은 감사드립니다!

+0

'cellForRow ...'에서이 작업을 수행하고 있습니까? 당신은 거기서해야만합니다. – tbilopavlovic

+0

예 - 이것은 그것의 작은 부분 일뿐입니다. 아이디어는 행이 표시되고 그 다음에 이미지가 비동기식으로 채워져 스크롤링 등이 부드럽게 진행됩니다. – Ben

+0

그래, 왜 이러는거야?'let cell = ....'? – tbilopavlovic

답변

2

collectionView.dequeueReusableCellWithReuseIdentifier은 수동으로 생성하는 대신 func collectionView(_ collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell에서 셀을 재사용하는 데 사용됩니다. 여기서 원하는 것은 재사용하지 않기 위해 셀을 검색하는 것이므로 cellForItemAtIndexPath(_ indexPath: NSIndexPath)을 사용해야합니다.

+0

if - cell = collectionView.cellForItemAtIndexPath (indexPath) as as cell? RewardCollectionViewCell {'- 도움 주셔서 감사합니다! – Ben

관련 문제