如何解决Swift-NSInternalInconsistencyException',原因:“请求的第1节的行数超出范围
我是第一次使用UITableViews,但遇到了一些问题。 对于上下文,我的tableView有1-2个部分。为5个不同的“用户名”调用URLRequest。对于每个用户名,它都会检查它是“有效”还是“无效”。如果有效,则将其附加到第一部分(第0部分)的“数据源”数组中。如果无效,则将其附加到第一部分(第1节)的“数据源”数组中。然后,重新加载tableView并正确显示数据。 用户可以点击“无效”部分(第1节)中的单元格之一来更正无效名称以使其有效。再次启动URL请求,该名称现在应该有效。
-
tableView.beginUpdates()
被呼叫。 - 从“无效”部分的“数据源”数组中删除了相应的名称。
- 该单元格已删除。 (仅当它不是“无效”部分中的“最后一个”单元格时。)
- 如果该单元格是“无效”部分中的最后一个单元格,则会删除整个部分。
- 更正的名称将附加到“有效”部分的“数据源”数组中。
-
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 举报,一经查实,本站将立刻删除。