Swift Realm удалить объект ошибка - запись транзакции - PullRequest
1 голос
/ 20 июня 2019

Я удаляю объект Realm и получаю эту ошибку:

Завершение приложения из-за неперехваченного исключения «RLMException», причина: «Может только добавлять, удалять или создавать объекты в Realm в транзакции записи - сначала вызовите beginWriteTransaction для экземпляра RLMRealm».

Я пробовал обновить ()

extension Realm {
    func addWord(_ word: RelatedWord) {
        do {
            try self.write {
                self.add(word)
            }
        } catch let error {
            print(error.localizedDescription)
        }
    }

    func deleteWord(_ word: RelatedWord) {
        BG {
            do {
                    self.beginWrite()
                    self.delete(word)
                    try self.commitWrite()
                    //self.refresh()
                } catch let error {
                 print(error.localizedDescription)
            }
        self.refresh()
        }
    }
}

VC:
realm.delete(word)

Ожидаемый результат: проведите пальцем, чтобы удалить объект из таблицы

Ошибка: удаление объекта происходит неправильно.

*** Завершение работы приложения из-за неперехваченного исключения «RLMException», причина: «Можно только добавлять, удалять или создавать объекты в области в транзакции записи - сначала вызовите beginWriteTransaction для экземпляра RLMRealm.»

Я думаю, что проблема не в моей функции удаления объекта области, а в том, что существует несоответствие между объектами области и табличным представлением, пытающимся получить доступ к удаленным объектам.

// Swipe to delete cell and word
func tableView(_ tableView: UITableView,trailingSwipeActionsConfigurationForRowAt indexPath: IndexPath) -> UISwipeActionsConfiguration? {

let action = UIContextualAction(style: .normal, title: "Delete", handler: { (action, view, completionHandler) in
    // Update data source when user taps action

    let letters = DataSingleton.shared.relatedArr.keys.sorted()
    if let data = DataSingleton.shared.relatedArr[letters[indexPath.section]]?.sorted(by: {$0.word < $1.word}) {
        let word = data[indexPath.row]
        print(word.word)
        self.realm.delete(word)


        tableView.beginUpdates()
        tableView.deleteRows(at: [indexPath], with: .fade)
        tableView.reloadRows(at: [indexPath], with: .automatic)
        tableView.endUpdates()
    }

    completionHandler(true)
})

1 Ответ

0 голосов
/ 20 июня 2019

Я не уверен, что такое BG, но я бы сделал это так:

func deleteWord(_ word: RelatedWord) {
        do {
            try self.write {
                self.delete(word)
            } 
        } catch let error {
             print(error.localizedDescription)
        }
    self.refresh()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...