Вставить раздел в табличное представление с помощью Swift

#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)