EXEC_BAD_ACCESS 填充 dispatch_async 中的单元格内容

EXEC_BAD_ACCESS populating cell contents in dispatch_async

我正在努力解决我遇到的 EXEC_BAD_ACCESS 错误。代码如下:

// 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 块中。

有什么想法吗?非常感谢!

collectionView.dequeueReusableCellWithReuseIdentifier 用于重用 func collectionView(_ collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell 中的单元格,而不是手动创建它们。你在这里想要的是检索单元格,而不是重用它,所以你应该使用:cellForItemAtIndexPath(_ indexPath: NSIndexPath).