Как обновить существующее значение в базе данных swift? - PullRequest
0 голосов
/ 04 апреля 2020

Я хочу сделать любую строку из «ложного» в «истинное» или наоборот, в зависимости от того, какой вид таблицы выбрал и отменил выбор метода. Это значит, что мне нужно обновить существующее значение. Как это сделать. Мой код не работает, он создает другую строку вместо обновления существующей.

Вот таблица

.

Вот модель

import UIKit
import RealmSwift

class TodoData: Object {

    @objc dynamic var todos: String = String()
    @objc dynamic var times: String = String()
    @objc dynamic var rows: Bool = Bool()

}

Вот код, который я написал для обновления значения существующей строки:

    let data = TodoData()

            do {
                try realm.write {
                    data.rows = true
                    realm.add(data)
                }
            } catch let error as NSError {
                print(error.localizedDescription)
            }

Ответы [ 2 ]

1 голос
/ 05 апреля 2020

Если вы буквально хотите:

Я хочу сделать любую строку из «ложного» в «истинное» или наоборот

Вот код, который сделает все ложные строки истинны, а все истинные строки ложные.

let toDoResults = realm.objects(TodoData.self)
for toDo in toDoResults {
    try! realm.write {
        toDo.rows = !toDo.rows
    }
}

Я думаю, что вы просто хотите переключить строку, когда пользователь вносит изменения в ваш tableView.

let selectedTodo = "a"
let results = realm.objects(TodoData.self).filter("todos == %@", selectedTodo)
if let thisTodo = results.first {
   try! realm.write {
      thisTodo.rows = !thisTodo.rows //will toggle from t to f and from f to t
   }
}
1 голос
/ 04 апреля 2020

Ваш код не обновляет существующие данные. Он создает новый ToDoData и вставляет его.

Вы хотите получить существующий ToDoData и обновить его в write. Вот пример.

let todos = "a"
guard let data = realm.objects(ToDoData.self).filter("todos == %@", todos).first else { return }
try! realm.write {
    data.rows = true
}
...