Używam dla mojego projektu RealmSwift
. Jednak nie jestem pewien, jak rozwiązać następujące:RealmSwift RLMException
RMLException
: Próba modyfikacji obiektu poza transakcji zapisu - callbeginWriteTransaction
naRLMRealm
pierwszej
rzucony instancji.
Czy ktoś ma jakąś wskazówkę?
import RealmSwift
func createOrUpdateMachineInRealm(machine: Machine){
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let realm = Realm()
realm.beginWrite()
realm.write{
realm.add(machine, update: true)
}
realm.commitWrite()
dispatch_async(dispatch_get_main_queue()) {
// update some UI
actionDelegate?.operationCompleted(true)
}
}
}
Rozwiązanie: Mijam parametry dla maszyny, jak również i przypisać je do maszyny w realm.write()
func createOrUpdateMachineInRealm(machine: Machine, name: String){
let priority = DISPATCH_QUEUE_PRIORITY_DEFAULT
dispatch_async(dispatch_get_global_queue(priority, 0)) {
// do some task
let realm = Realm()
realm.write{
machine.name = name
realm.add(machine, update: true)
}
}
}
Dzięki za odpowiedź @NateMann. Jestem w stanie dodać go za pierwszym razem bez błędu. Jednak mam tę '*** aplikację terminującą ze względu na nieprzechwycony wyjątek 'RLMException', powód:" Próba modyfikacji obiektu poza transakcją zapisu - wywołaj beginWriteTransaction na instancji RLMRealm pierwszy ", gdy ponownie wywołasz metodę (dla aktualizacja). – perwyl
Dodajesz maszynę lub ją aktualizujesz. Jeśli aktualizujesz jeden, powiedz machine.name = "Drill", to musisz to zrobić w Realm(). Write {}, jak to Realm(). Napisz {machine.name = "Drill"} –
Czy to możliwe mi zaktualizować obiekt Machine na poziomie interfejsu użytkownika i przekazać do Realm() (Storage.swift) do transakcji zapisu? Próbuję unikać używania Realm w ViewControllers. Bardzo nowy w realmSwift – perwyl