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 中使多个单元格出列的方法