我在TableView中插入单元格时遇到崩溃。我试过下面的链接,但不确定是什么问题
以下是我的代码
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return names.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell: UITableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
cell.textLabel?.text = names[indexPath.row]
return cell
}
数据源代码在
之下 private var names: [String] = (50...99).map { String($0) }
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
DispatchQueue.main.asyncAfter(deadline: .now() + 3.0) {
self.appendCells()
}
}
private func appendCells() {
names = (0...49).map { String($0) } + names
customTableView.beginUpdates()
let indexPat = IndexPath(row: names.count - 1, section: 0)
customTableView.insertRows(at: [indexPat], with: .fade)
customTableView.endUpdates()
}
我无法理解我在这里错过了什么。对不起,如果我做的很愚蠢。请告诉我如果我需要解释更多。
我收到错误:
原因:'无效更新:第0节中的行数无效。更新(100)后现有部分中包含的行数必须等于该部分中包含的行数在更新(50)之前,
答案 0 :(得分:3)
问题是您添加到数据模型的值的数量不匹配以及您添加到表视图的行数。
该行:
names = (0...49).map { String($0) } + names
为您的数据模型添加50个新值。
但是你只告诉表视图有一个新行。这是您在错误消息中被告知的内容。
您需要一个循环来构建一个包含50个索引路径的数组。
private func appendCells() {
names = (0...49).map { String($0) } + names
var paths = [IndexPath]()
for row in 0...49 {
let indexPath = IndexPath(row: row, section: 0)
paths.append(indexPath)
}
customTableView.insertRows(at: paths, with: .fade)
}
答案 1 :(得分:0)
错误清楚地表明您正在添加indexPath,其中row = 99,section = 0,而实际上,它的最大索引路径包含值:row = 49,section = 0。
在插入之前,tableview调用数据源方法numberOfRowsInSection
- 此方法必须返回更新,更大的数组计数(100),而不是更早的数组(50)。
答案 2 :(得分:0)
1)'appendCells'之前的模型有50个名字计数。 2)通话结束后,您的模式等于100个名字计数,但您只能在索引路径= 99的情况下进入一个单元格?您需要再插入50行而不是一行。
答案 3 :(得分:0)
我遇到了这个问题,它可以通过以下方法工作
/Applications/NetBeans/NetBeans\ 8.2.app/Contents/Resources/NetBeans/etc/netbeans.conf