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)
.
我正在努力解决我遇到的 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)
.