微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift-NSInternalInconsistencyException',原因:“请求的第1节的行数超出范围

如何解决Swift-NSInternalInconsistencyException',原因:“请求的第1节的行数超出范围

我是第一次使用UITableViews,但遇到了一些问题。 对于上下文,我的tableView有1-2个部分。为5个不同的“用户名调用URLRequest。对于每个用户名,它都会检查它是“有效”还是“无效”。如果有效,则将其附加到第一部分(第0部分)的“数据源”数组中。如果无效,则将其附加到第一部分(第1节)的“数据源”数组中。然后,重新加载tableView并正确显示数据。 用户可以点击“无效”部分(第1节)中的单元格之一来更正无效名称以使其有效。再次启动URL请求,该名称现在应该有效。

  1. tableView.beginUpdates()被呼叫。
  2. 从“无效”部分的“数据源”数组中删除了相应的名称
  3. 该单元格已删除。 (仅当它不是“无效”部分中的“最后一个”单元格时。)
  4. 如果该单元格是“无效”部分中的最后一个单元格,则会删除整个部分。
  5. 更正的名称将附加到“有效”部分的“数据源”数组中。
  6. tableView.endUpdates()被呼叫。

这是在代码方面发生的事情:

dispatchQueue.main.async {
    self.tableView.beginUpdates()
    users.invalid.usernames.remove(at: indexPath.row) // Removing value from Data Source

    if users.invalid.usernames.count == 0 { // Section (1) Data Source contains no values.
        // Deleting Section (1) because it only contains one row which needs to be deleted.
        let indexSet = IndexSet(arrayLiteral: indexPath.section)
        self.tableView.deleteSections(indexSet,with: .automatic)
    }
    else { // Section (1) Data Source still contains values,so only delete the corresponding row.
        self.tableView.deleteRows(at: [indexPath],with: .automatic)
    }
}

运行其他代码,然后tableView结束更新。

dispatchQueue.main.async {
    self.tableView.endUpdates()
}

现在,当错误发生时,它不会解释它来自哪一行,而是说Requested the number of rows for section...,我只能假定与tableView函数有关:func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int

这是我的代码

func numberOfSections(in tableView: UITableView) -> Int {
    if users.invalid.usernames.count == 0 { // If Section (1) Data Source is empty,don't show Section (1).
        return 1
    }
    else { // Section (1) Data Source contains data,show both sections.
        return 2
    }
}

func tableView(_ tableView: UITableView,numberOfRowsInSection section: Int) -> Int { //Gets called once for each section that exists.
    /* Since the Section (1) was deleted,this function should only be called once.
     */
    if section == 0 {
        return users.valid.usernames.count // Section (0) Data Source count will always be at least 1.
    }
    else if section == 1 { // Theoretically shouldn't even happen in this case.
        return users.invalid.usernames.count // Return Section (1) Data Source count.

    }
    else { // Will never happen.
        return 1
    }
}

我为解决这个问题不知所措。任何帮助表示赞赏:)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。