gpt4 book ai didi

ios - fatal error : Index out of range on second cell deletion

转载 作者:搜寻专家 更新时间:2023-11-01 06:34:07 24 4
gpt4 key购买 nike

在我的自定义单元格中,我有一个计时器。当倒计时达到 0 时,我调用我的委托(delegate)方法并自动删除该单元格。问题是,当第二个单元格达到 0 时,我的应用程序崩溃并出现错误 fatal error: Index out of range

在我的自定义单元格中,我设置了我的数据:

protocol MyDelegateName {
func removeOfferExpired(offerId: String, indexPath: IndexPath)
}

class MyCustomCell: UITableViewCell {
var offer:Offers?
var cellIndexPath:IndexPath?
var delegate:MyDelegateName?


func setupData(offer:Offers, indexPath:IndexPath){
self.offer = offer
self.cellIndexPath = indexPath
//...other code not relevant
}

//When the time reach zero I call the following method

func updateTime() {
if timeLeft > 0 {
timeLeft = endTime.timeIntervalSinceNow
offerExpiresLabel.textColor = UIColor.white
offerExpiresLabel.text = timeLeft.hmmss
}else {
offerExpiresLabel.textColor = UIColor.red
offerExpiresLabel.text = "Offer Expired"
timer.invalidate()
self.delegate?.removeOfferExpired(offerId: (self.offer?.offer_id!)!, indexPath: self.cellIndexPath!)
}
}

在我的 ViewController 中,我在 cellForRowAt 中设置我的单元格数据:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let offer = offers[indexPath.row]
let cell = tableView.dequeueReusableCell(withIdentifier: cellId, for: indexPath) as! MyCustomCell
cell.setupData(offer: offer, indexPath: indexPath)
cell.delegate = self
return cell
}

然后在 func removeOfferExpired(offerId: String, indexPath: IndexPath) 里面我尝试使用:

1. self.offers.remove(at: indexPath.row)
self.tableView.reloadData()

2. self.offers.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: .automatic)
self.tableView.reloadData()

3. //and even try to "wrap" it inside begin/end updates
tableView.beginUpdates()
self.offers.remove(at: indexPath.row)
self.tableView.deleteRows(at: [indexPath], with: .automatic)
tableView.endUpdates()

它总是第二次崩溃。我知道在删除第一个单元格后,我在 setupData 中分配给单元格的 indexPath 不一样,但我认为 reloadData 是更新 indexPath 的方法剩余的细胞。

最佳答案

您的主要问题是,您告诉单元格它的索引路径,然后您的单元格将该索引路径传递给它的委托(delegate)。但是单元格的索引路径并不稳定。它随着其他行的添加、删除或移动而改变。

您的单元格协议(protocol)的方法应该将其自身(单元格)作为参数传递,而不是索引路径。然后委托(delegate)可以查询 TableView 以找到单元格的最新索引路径并根据该最新索引路径执行行删除。

关于ios - fatal error : Index out of range on second cell deletion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43621995/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com