es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Realidad accedida desde el hilo incorrecto utilizando async y await

Al ejecutar el código a continuación, obtengo el error “Acceso a Realm desde un hilo incorrecto” en la segunda línea “try! realm.write({“, la primera línea de escritura no causa ningún error. ¿Alguna idea de cómo solucionarlo?

let realm = try! await Realm()
print("User Realm User file location: \(realm.configuration.fileURL!.path)")
try! realm.write { // <= No hay error aquí
    realm.add(groups, update: .modified)
}
StartApp._Groups = groups
if let items  = await api.getArticles(aricleIDs: ids) {
    try! realm.write({ // <= Error aquí
        realm.add(items, update: .modified)
    })
    StartApp._Items = items
    var index = 0
    StartApp._Items = StartApp.Items.map { item in
        item.i = index
        index = index + 1
        return item
    }
    groups.forEach { group in
        group.items = items.filter({ $0.groupId == group.id })
    }
}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error “Realm accesado desde el hilo incorrecto” ocurre porque Realm solo puede ser accesado desde el hilo en el que fue creado. En el código proporcionado, realm fue creado en el hilo principal, pero el segundo realm.write está siendo llamado desde un hilo diferente.

    Para solucionarlo, puedes utilizar DispatchQueue.main.async para mover el segundo bloque de realm.write de vuelta al hilo principal, de la siguiente manera:

    if let items = await api.getArticles(aricleIDs: ids) {
        DispatchQueue.main.async {
            let realm = try! Realm()
            try! realm.write({
                realm.add(items, update: .modified)
            })
    
            // resto del bloque que modifica los objetos de realm va aquí
        }
    }
    

    De esta forma, te aseguras de que todas las operaciones de Realm estén ocurriendo en el mismo hilo en el que Realm fue creado, evitando así el error “Realm accesado desde el hilo incorrecto”.

Comments are closed.