Swift 试图为同一索引路径出列多个单元格,这是不允许的

Posted

技术标签:

【中文标题】Swift 试图为同一索引路径出列多个单元格,这是不允许的【英文标题】:Swift Attempted to dequeue multiple cells for the same index path, which is not allowed 【发布时间】:2018-03-09 21:42:03 【问题描述】:

我有一个带有各种不同单元格的 tableView,这些单元格作为 textLabel 的数字每 0.1 秒增加一次。我不是每 0.1 秒重新加载一次 tableView 或可见单元格,而是反映更改文本会更有效,但是当我尝试这样做时,应用程序会因问题标题中给出的错误而崩溃。这是我的代码:

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath) as! OwnedBusinessCell

    cell.textLabel?.text = ""

    return cell


调用我的函数的定时器:

func scheduledTimerWithTimeInterval()
    reloadTimer = Timer.scheduledTimer(timeInterval: 0.1, target: self, selector: #selector(self.reloadTV), userInfo: nil, repeats: true)

我“尝试”更改文本的函数:

@objc func reloadTV() 

    for myIP in (tableView.indexPathsForVisibleRows)! 
        let cell = tableView(tableView, cellForRowAt: myIP)
        cell.textLabel?.text = increasingVariable
    


完全错误:

由于未捕获的异常而终止应用程序 'NSInternalInconsistencyException',原因:'试图出队 同一索引路径的多个单元格,这是不允许的。如果你 确实需要比表格视图请求更多的单元格出列, 使用 -dequeueReusableCellWithIdentifier: 方法(没有索引 小路)。单元格标识符:单元格,索引路径:length = 2, path = 0 - 0'

感谢您的帮助!

【问题讨论】:

【参考方案1】:
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 

是表视图数据源方法,并不意味着直接调用, 这就是你在做什么

    let cell = tableView(tableView, cellForRowAt: myIP)

如果您想要一个特定的单元格,请询问表格视图,而不是 数据来源:

for myIP in tableView.indexPathsForVisibleRows ?? [] 
    if let cell = tableView.cellForRow(at: myIP) 
        // ...
    

或者更简单:

for cell in tableView.visibleCells 
    // ...

【讨论】:

以上是关于Swift 试图为同一索引路径出列多个单元格,这是不允许的的主要内容,如果未能解决你的问题,请参考以下文章

麻烦出队 uicollectionview 单元格(swift 3)

并非所有单元格都显示在CollectionViewController Swift中

在 UIcollectionview 中使多个单元格出列的方法

通过向左滑动选择 CollectionView 单元格(Swift 5)

Swift 表格视图返回我的字典的一些单元格

单元格变量为 nil,其中设置了值 collectionview 索引路径