Динамическое удаление разделов после удаления из таблицы - PullRequest
0 голосов
/ 17 октября 2019

Я работаю над очисткой таблицы. Я добавляю предметы и сохраняю их через объекты Realm. У каждого элемента есть категория, а категории являются разделами в моем табличном представлении. Категории обновляются по мере добавления элементов, и если добавляется новая категория, она отображается в виде раздела в табличном представлении. Это все работает нормально.

Однако удаление является проблемой. Когда пользователь проводит пальцем, чтобы удалить последний элемент в разделе, я хотел бы, чтобы заголовок раздела также удалялся. Вот код, который я использую для управления удалением (через SwipeCellKit):

func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath, for orientation: SwipeActionsOrientation) -> [SwipeAction]? {
        guard orientation == .right else { return nil }

        let deleteAction = SwipeAction(style: .destructive, title: "Delete") { action, indexPath in
            //remove from
            self.updateModel(at: indexPath)

        }
        deleteAction.image = UIImage(named: "delete-icon")
        return [deleteAction]
    }

Функция updateModel () удаляет элемент из Realm.

У меня есть функция, которая также пересчитывает категории:

func loadCategories() {
        let localCat = try! Realm().objects(Items.self).filter("list_id = '\(list_id)'").distinct(by: ["item_category"])
        var localCatArr : [String] = []
        for cat in (localCat) {
            localCatArr.append(cat.item_category)
        }
        categories = localCatArr
        if categories.count == 0 {
            categories.append("New List")
        }

    }

И функция, которая перезагружает данные в массиве элементов (которая также пытается перезагрузить представление таблицы):

func loadItems() {
        itemsList = try! Realm().objects(Items.self).filter("list_id = '\(list_id)'").sorted(byKeyPath: "item_category")

        loadCategories()
        tableView.reloadData()

    }

В обработчике завершения я попытался вызвать эту функцию и tableView.reloadData, но я получаю сообщение об ошибке в виде:

Завершение работы приложения из-за необработанного исключения «NSInternalInconsistencyException», причина: 'попытка удалить строку 0 из раздела 2, но перед обновлением есть только 2 раздела'

Я думаю, что мне нужно, чтобы numberOfSections () вызывался снова и что-то перестраивалось, но не могу понятькак заставить это произойти без катастрофы. Я на правильном пути со своими мыслями, и какие-либо предложения о том, как заставить это обновить?

...