Удаленная ячейка просмотра таблицы заменяется последней ячейкой - PullRequest
0 голосов
/ 18 мая 2018

У меня проблема с моим tableView, который заполнен объектами области.Когда я удаляю ячейку, последняя ячейка tableView прыгает на место удаленной ячейки.Кто-нибудь знает, в чем может быть причина такого поведения?

 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete{

        self.updateModel(at: indexPath)
        self.loadTimes()
    }
}

func loadTimes(){

    results = realm.objects(Times.self)
    tableView.reloadData()
}

 func updateModel(at indexpath: IndexPath) {
    if let itemForDeletion = results?[indexpath.row] {
        do{
            try self.realm.write {
                self.realm.delete(itemForDeletion)
            }
        } catch {
            print("Error saving context \(error)")
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Область гарантирует последовательный порядок Results только при сортировке запроса.Попробуйте добавить вызов к sorted

results = realm.objects(Times.self)

становится

results = realm.objects(Times.self).sorted(byKeyPath: "time")
0 голосов
/ 18 мая 2018

Возможно, потому что вы обновляете (или удаляете), а затем загружаете ваше табличное представление в глобальный поток.Вы не используете assync методы, поэтому они не запускаются в последовательности.Попробуйте сделать let group = DispatchGroup () и перед загрузкой или удалением выполните group.enter (), и после того, как он закончит обновление (или удаление), создайте group.leave () и введите следующий метод загрузки.

Но, пожалуйста, попробуйте создать ассинкционные методы с использованием замыканий при вставке или обновлении объектов области.Разделите обязанности.

...