#swift
#swift
Вопрос:
Я пытаюсь вставить новый раздел в tableview
let oldIns = insertCounter //insertCounter = 40
insertCounter = Int(INSERT_MESSAGES) // insertCounter = 80
let minn = min(insertCounter, Int(dbmessages.count))
print(minn) // minn = 80
tableView.beginUpdates()
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(0, minn)) as IndexSet, with: .top)
tableView.endUpdates()
override func numberOfSections(in tableView: UITableView) -> Int {
let a = min(insertCounter, Int(dbmessages.count))
print(a) // after call insertSections a = 80
return min(insertCounter, Int(dbmessages.count))
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return 5
}
Я получаю сообщение об ошибке:
Недопустимое обновление: недопустимое количество разделов. Количество разделов, содержащихся в табличном представлении после обновления (80), должно быть равно количеству разделов, содержащихся в табличном представлении до обновления (40), плюс или минус количество вставленных или удаленных разделов (80 вставлено, 0 удалено).
Когда я делаю следующее:
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(oldIns, minn)) as IndexSet, with: .top)
Я получаю сообщение об ошибке:
исключение ‘NSInternalInconsistencyException’, причина: ‘попытка вставить раздел 80, но после обновления осталось только 80 разделов’
Что я делаю не так?
Комментарии:
1. Не связанный, но
NSIndexSet(indexesIn: NSMakeRange(0, minn)) as IndexSet
ужасный objective-c-ish . Это Swift:IndexSet(integersIn: 0..<minn)
. Сначала вам нужно обновить массив источника данных, затем вставить строки / разделы. ИbeginUpdates/endUpdates
в этом случае бессмысленно.2. @vadian да, большое вам спасибо, вы можете добавить в качестве ответа
Ответ №1:
как описано в описанной ошибке, количество ваших старых разделов равно 40, вы вставляете 80 разделов, поэтому количество обновленных разделов должно быть 120.
override func numberOfSections(in tableView: UITableView) -> Int {
let a = min(insertCounter, Int(dbmessages.count))
print(a) // after call insertSections a = 80
// you should return 120 instead of 80 here.
return min(insertCounter, Int(dbmessages.count))
}
или вы могли бы вставить вот так
tableView.insertSections(NSIndexSet(indexesIn: NSMakeRange(oldIns, minn)) as IndexSet, with: .top)