Eliminar objeto de reino por valor
Comencé a probar Realm para IOS, así que creé dos clases:
Modelo de archivos
import Foundation
import RealmSwift
class FilesModel: Object {
@objc dynamic var id : Int = 0
@objc var fileName = ""
@objc dynamic var dateOfCreation = Date()
@objc dynamic var dateOfModification = Date()
@objc dynamic var type = ""
var file = List<data>()
}
Modelo de grupos
import Foundation
import RealmSwift
class GroupsModel: Object {
@objc dynamic var id : Int = 0
@objc dynamic var name = ""
@objc dynamic var dateOfCreation = Date()
@objc dynamic var dateOfModification = Date()
@objc dynamic var filesCount = Int()
var files = List<filesmodel>()
override static func primaryKey() -> String? {
return "id"
}
}
Ahora el problema es que estoy copiando archivos dentro del objeto de modelo de grupo de archivos, pero necesito eliminar el objeto padre. Piense en ello como una movida, estoy moviendo archivos a la carpeta. Lo que he hecho es guardar una copia del archivo en la carpeta y eliminar el archivo desde fuera de la carpeta.
El problema es que cuando elimino el archivo fuera de la carpeta, también se elimina el archivo de dentro.
Mi comprensión del problema es que las clases son un tipo de referencia, por lo que estoy copiando una referencia. Entonces, cuando elimino la referencia, se eliminará el archivo del proyecto completo.
He intentado muchas soluciones como la copia profunda y desconectada.
Gracias de antemano.
davy.ai
Solución para eliminar un objeto padre sin afectar al objeto hijo
El problema al eliminar el objeto padre y el objeto hijo es que ambos son tipos de referencia. Al eliminar el objeto padre, se elimina de la memoria y también la referencia al objeto hijo. Por lo tanto, al intentar acceder al objeto hijo, se produce un error porque ya no existe.
Una solución a este problema es copiar el objeto hijo antes de eliminar el objeto padre. Esto creará una nueva referencia al objeto hijo, que no se verá afectado por la eliminación del objeto padre. Luego puedes agregar este objeto hijo copiado a un nuevo objeto padre o mantenerlo como un objeto independiente.
Para lograr esto, puedes utilizar el método
create
de Realm, que permite crear un nuevo objeto Realm con las mismas propiedades que un objeto existente. Aquí hay un ejemplo de fragmento de código:En este fragmento de código,
fileToDelete
es el objeto hijo que se quiere copiar antes de eliminar el objeto padre. El métodorealm.create
crea un nuevo objetoFilesModel
con las mismas propiedades quefileToDelete
y devuelve una referencia al nuevo objeto. Ahora puedes eliminar el objeto padre sin afectar al objeto hijo.Después de eliminar el objeto padre,
copiedFile
es ahora un objeto independiente que se puede agregar a un nuevo objeto padre o mantener como un objeto independiente.¡Espero que esto ayude! Hazme saber si tienes alguna pregunta adicional.