Получить ошибку "Объект был удален или признан недействительным" при удалении элемента в области - PullRequest
0 голосов
/ 02 мая 2018

я загружаю данные просмотра таблицы из области

let tasks = realmManager.objects(ModelTask.self).filter("planId == %@", currentPlan.id)
    datasource = Array(tasks)
    tableViewMain.reloadData()

и удаляем элемент, когда пользователь нажимает удалить в табличном представлении

   func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
    let delete = UITableViewRowAction(style: .normal, title: "删除".localized) {
        [weak self] action, index in
        guard let `self` = self else {return}

        let task = self.datasource[indexPath.row]

        let realm = try! Realm()
        try? realm.write {
            realm.delete(task)
        }

        self.datasource.remove(at: indexPath.row)
        tableView.reloadData()

    }
    delete.backgroundColor = UIColor(hex:"fe5d5c")

    return [delete]
}

и он потерпел крах, когда область удалила этот элемент.

Я получил сообщение об ошибке: «Объект был удален или признан недействительным.»

Я запутался, это отлично работает на другом контроллере представления.

почему бы не работать здесь?

Редактировать ----------

решил эту проблему.

потому что после удаления этого элемента у меня есть функция журнала, которая использовала этот элемент. вот почему он всегда падает.

спасибо всем

1 Ответ

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

попробуйте

    func tableView(_ tableView: UITableView, editActionsForRowAt indexPath: IndexPath) -> [UITableViewRowAction]? {
        let delete = UITableViewRowAction(style: .normal, title: "删除".localized) {
            [weak self] action, index in
            guard let `self` = self else {return}

            let task = self.datasource[indexPath.row]

            let realm = try! Realm()
            try? realm.write {
                realm.delete(task)
                self.datasource = realmManager.objects(ModelTask.self).filter("planId == %@", currentPlan.id)
            }

            tableView.reloadData()

        }
        delete.backgroundColor = UIColor(hex:"fe5d5c")

        return [delete]
    }

Или вы можете проверить isInvalidated, прежде чем удалить его из источника данных

if !task.isInvalidated{
    self. datasource.removeObject(task)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...