将indexng indexPath插入tableView时会发生NSInternalInconsistencyException,但仅当行计数超过某个阈值时才会发生

时间:2016-03-28 20:00:27

标签: ios swift uitableview

我有两个表,我在它们之间拖放:sourceTableView和targetTableView。它们每个都有自己的tableViewController。 parentContainerViewController管理一个'滑出' UI允许用户使用“longPressGesture'在sourceTableView单元格上,导致sourceTableView滑出,暴露下面的targetTableView,此时用户可以放弃'拖动的单元格在targetTableView中的位置。一切正常,直到targetTableView增长到大约21-27行。一旦我们达到这个大小,如果我重新运行项目,我就开始得到NSInternalInconsistencyException。错误的详细信息如下:原因:'无效更新:第0节中的行数无效。更新后现有部分中包含的行数(27)必须等于该行中包含的行数更新前的部分(0),加上或减去从该部分插入或删除的行数(插入1个,删除0个),加上或减去移入或移出该部分的行数(0移入,0移动)出)'

起初我以为我遇到了竞争条件问题,因为更新前的行数是" 0"之后是" 27"。也许tableView在用户拖动项目并在tableView上调用insertIndex方法之前无法加载。但后来我注意到它工作正常,直到我们达到一定的长度。在这种情况下,竞争条件是没有意义的。现在我认为它与“可见细胞”有关。加载vs未加载。但为什么会是' 0' 0行?我一直在寻找答案。有许多NSInconsistency,但似乎没有回答我的具体问题。

这是告诉targetTableViewController将一个项插入其数据源然后告诉targetTableView insertRowsAtIndexPath的函数调用:

  dragDropDataSource.tableView(self, insertDataItem: item, atIndexPath: indexPath)

  self.beginUpdates()

  self.insertRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Fade)


  self.endUpdates()

以下是实现上述调用的targetTableViewController代码:

func tableView(tableView: UITableView, insertDataItem dataItem : AnyObject, atIndexPath indexPath: NSIndexPath) -> Void {

    if let di = dataItem as? DataItem {
      data.insert(di, atIndex: indexPath.row)
    }

data是存储' DataItems'的数组。它们显示在tableView行中。

此外。 targetTableView通过其viewDidLoad()中的调用初始化为getMyTopTen()

    func getMyTopTen() {

        let pwAPI = PowWowAPI()
        pwAPI.getMyTopTen(self.boardId!) {
          (entries:[Entry])in

      for(var i=0; i < entries.count; i++) {
        let dataItem = DataItem(indexes: String(i), entry: entries[i])
        self.data.append(dataItem)
      }

    }
    dispatch_async(dispatch_get_main_queue()) {
      self.targetTableView.reloadData()
    }
  }

我希望我已经充分解释了这个问题。如果没有,请帮助我更好地提出这个问题。我很想在这里提问。

0 个答案:

没有答案