2016-07-06 16 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 =行でクラッシュが発生しています。なぜなら、私はindexPathが存在しなくなったからです(collectionViewの内容を変更したため)。私はそれを確認する方法がわからない。

私は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

'' let cell = collectionView.cellForItemAtIndexPath(indexPath)as? RewardCollectionViewCell {' - おかげさまで助けてください! – Ben

関連する問題