表视图未知阴影错误

时间:2017-07-11 16:06:43

标签: ios iphone swift uitableview

我的应用程序中有一个表格视图,我已设置为在两种不同的查看模式之间切换。按下按钮时,表视图将更改为显示已完成的任务,而不是需要注意的任务。切换它按预期工作,直到您将任务标记为完成或不完整。在此之后,下次用户按下show complete tasks按钮时,它将使应用程序崩溃,从而出现此错误:

  

断言失败 - [UITableView _addPendingSwipeDeletionShadowUpdateForSection:],/ BuildRoot / Library / Cache / com.apple.xbs / Sources / UIKit / UIKit-3688.4 / UITableView.m:15334

     

由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'UITableView内部不一致:添加影子更新时_swipedIndexPath不能为n'

我知道这个错误说明了阴影和滑动的索引路径,但是我没有弄乱表视图的阴影,所以我不确定问题是什么,特别是因为几天前这个工作正常。我在完整数据和不完整数据之间切换的代码如下:

tableView.beginUpdates()
if showComplete {
    showComplete = false
    if completedArray.count != 0 {
        tableView.deleteSections(NSIndexSet.init(index: 0) as IndexSet, with: .fade)
    }
    if taskArray.count != 0 {
        allComplete()
    }
    else {
        tasksIncomplete()
        tableView.insertSections(NSIndexSet.init(indexesIn: NSMakeRange(0, taskArray.count)) as IndexSet, with: .fade)
    }            
}
else {
    showComplete = true
    if taskArray.count != 0 {
        tableView.deleteSections(NSIndexSet.init(indexesIn: NSMakeRange(0, taskArray.count)) as IndexSet, with: .fade)
    }
    if completedArray.count == 0 {
        allComplete()
    }
    else {
        tasksIncomplete()
        tableView.insertSections(NSIndexSet.init(index: 0) as IndexSet, with: .fade)
    }       
}
tableView.endUpdates()

当没有要查看的数据或添加新数据时,函数allComplete()tasksIncomplete()只隐藏并显示tableView。我完成任务的代码如下:

self.tableView.beginUpdates()
self.completedArray.append(thisTask)
self.taskArray[indexPath.section].remove(at: indexPath.row)
if self.taskArray[indexPath.section] == [] {
    self.taskArray.remove(at: indexPath.section)
    self.dynamicSectionHeaders.remove(at: indexPath.section)
    self.tableView.deleteSections([indexPath.section], with: .left)
}
else {
    self.tableView.deleteRows(at: [indexPath], with: .automatic)
}
self.tableView.endUpdates()

标记任务不完整的代码是:

self.tableView.beginUpdates()
self.completedArray.remove(at: indexPath.row)
if self.completedArray.count == 0 {
    self.tableView.deleteSections([0], with: .left)
}
else {
    self.tableView.deleteRows(at: [indexPath], with: .automatic)
}
self.sortIncompleteTaskArray()
self.tableView.endUpdates()

taskArray是一个二维数组,包含部分,然后是实际数据。 completedArray只是一维的。任何帮助将不胜感激。我看了一遍,似乎这个错误从未被记录过。感谢。

1 个答案:

答案 0 :(得分:0)

我可以通过在按下完整按钮时手动重新加载整个数据源来解决问题。它可能不是最好的解决方案,但它有效。