Строка в UITableView не удаляется сразу - PullRequest
0 голосов
/ 07 января 2019

Я использую метод делегата trailingSwipeActionsConfigurationForRowAt UITableView для обработки, когда пользователь проводит пальцем, чтобы удалить определенную ячейку (элемент).

Мой UIContextualAction для событие удаления выглядит следующим образом. Сначала я удаляю элемент из базы данных Realm, а затем удаляю строку из представления таблицы

func tableView(_ tableView: UITableView, trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {
    let deleteAction = UIContextualAction(style: .destructive, title: nil) { _,_,_ in
        Repository.shared.deleteItem(self.items![indexPath.row])
        tableView.deleteRows(at: [indexPath], with: .fade)
    }
    ...
}

Но по какой-то причине, когда я удаляю ячейку, она не удаляется сразу, а возвращается в положение между пролистыванием. Затем, когда я прокручиваю табличное представление, ячейка исчезла, как вы можете видеть в GIF ниже:

enter image description here

Я могу «исправить» это, перезагрузив данные табличного представления сразу после удаления определенного элемента из базы данных, но это не то, что я хочу, я хочу использовать deleteRow(at:with:) из-за анимации.


Одно из предположений заключается в том, что это связано с удалением элемента из базы данных Realm.

Я удаляю элемент, используя delete метод

func deleteItem(_ item: Item) {
    do {
        try realm.write {
            realm.delete(item)
        }
    } catch {
        print(error)
    }
}

затем в качестве массива источника данных для моего представления таблицы я использую Realm's Results

var items: Results<Item>?

Кто-нибудь знает, почему это происходит? Спасибо.

...