Следующий код успешно заполняет таблицу Cars
и группирует их по Category
то, что мне не удалось сделать, так это удалить последний элемент из раздела. Когда есть несколько элементов, я могу успешно удалить их все, кроме последнего; на последнем я получаю сообщение об ошибке.
CODE
class Car{
var make = ""
var model = ""
var category = ""
var isActive = false
init(make:String, model:String, category:String, isActive:Bool) {
self.make = make
self.model = model
self.category = category
self.isActive = isActive
}
}
class ViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
@IBOutlet weak var myTable: UITableView!
var carsFromRealmDatabase:[Car] = [Car(make:"Ford", model:"Mustang", category: "Sport", isActive: false),
Car(make:"Ford", model:"Escort", category: "Sport", isActive: false),
Car(make:"Chevy", model:"Camaro", category: "Sedan", isActive: false),
Car(make:"Volkswagen", model:"Jetta", category: "Sedan", isActive: false),
Car(make:"Tesla", model:"Model S", category: "Sporty", isActive: false),
Car(make:"Tesla", model:"Cybertruck", category: "Pickup", isActive: false),]
var sections : [[Car]] = []
override func viewDidLoad() {
super.viewDidLoad()
createSectionsFromCars()
}
func numberOfSections(in tableView: UITableView) -> Int {
return sections.count
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return sections[section].count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "myCustomCell", for: indexPath) as! MyCustomCell
cell.textLabel!.text = sections[indexPath.section][indexPath.row].model
return cell
}
func tableView(_ tableView: UITableView, titleForHeaderInSection section: Int) -> String? {
return sections[section][0].category
}
func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
return 40
}
func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
// DELETE action
let delete = UITableViewRowAction(style: .destructive, title: "Delete") { action, index in
self.carsFromRealmDatabase.remove(at: indexPath.row)
self.createSectionsFromCars()
tableView.deleteRows(at: [indexPath], with: UITableView.RowAnimation.automatic)
self.myTable.reloadData()
}
return [delete]
}
func createSectionsFromCars(){
// temporary Dictionary to be able to group cars by category.
var sectionForCategory:Dictionary = [String: [Car]]()
// add groups of arrays from Dictionary to sections array.
for car in carsFromRealmDatabase {
if sectionForCategory[car.category] == nil {
sectionForCategory[car.category] = []
}
sectionForCategory[car.category]!.append(car)
}
sections = sectionForCategory.keys.sorted().map({ sectionForCategory[$0]! })
}
}
ERROR
Thread 1: Exception: «Недопустимое обновление: недопустимое количество разделов. количество разделов, содержащихся в табличном представлении после обновления (3), должно быть равно количеству разделов, содержащихся в табличном представлении до обновления (4), плюс или минус количество вставленных или удаленных разделов (0 вставлено, 0 удалено ). "
В Image 1
мне удалось удалить Escort
без проблем, но в Image 2
я получил ошибку при попытке удалить Mustang
.
введите описание изображения здесь
Что мне не хватает?