En algunos casos, es posible que desees eliminar por completo un archivo de reino del disco.
Realm evita copiar datos en memoria excepto cuando es absolutamente necesario. Como resultado, todos los objetos administrados por un reino tienen referencias al archivo en disco. Antes de poder eliminar el archivo de forma segura, debe asegurarse de desasignar estos objetos:
Todos los objetos leídos o añadidos al reino
Todos los objetos de lista y resultados
Todos los objetos ThreadSafeReference
El reino mismo
Advertencia
No borrar archivos mientras los reinos estén abiertos
Si elimina un archivo de reino o cualquiera de sus archivos auxiliares mientras una o más instancias del reino están abiertas, podría dañar el reino o interrumpir sincronización.
Eliminar un archivo de Realm para evitar la migración
Si itera rápidamente durante el desarrollo de su aplicación, puede que le convenga eliminar un archivo de dominio en lugar de migrarlo al realizar cambios en el esquema. La configuración de dominio proporciona el parámetro deleteRealmIfMigrationNeeded para facilitar este caso.
Cuando se establece esta propiedad en trueEl SDK elimina el archivo de dominio cuando se requiere una migración. De esta manera, puede crear objetos que coincidan con el nuevo esquema en lugar de escribir bloques de migración para datos de desarrollo o prueba.
do { // Delete the realm if a migration would be required, instead of migrating it. // While it's useful during development, do not leave this set to `true` in a production app! let configuration = Realm.Configuration(deleteRealmIfMigrationNeeded: true) let realm = try Realm(configuration: configuration) } catch { print("Error opening realm: \(error.localizedDescription)") }
Eliminar un archivo de reino
En la práctica, hay dos momentos seguros para eliminar el archivo de reino:
Al iniciar la aplicación, antes de abrir el reino.
Después de haber abierto únicamente el reino dentro de un grupo
autoreleaseexplícito, lo que garantiza la desasignación de todos los objetos dentro de él.
Puede eliminar los .realm .note .management archivos, y de una configuración determinada con el método de clase +[RLMRealm deleteFilesForConfiguration:error:].
@autoreleasepool { // all Realm usage here -- explicitly guarantee // that all realm objects are deallocated // before deleting the files } // Get configuration RLMApp *app = [RLMApp appWithId:YOUR_APP_ID]; RLMUser *user = [app currentUser]; RLMRealmConfiguration *configuration = [user configurationWithPartitionValue:@"some partition value"]; configuration.objectClasses = @[Task.class]; NSError *error = nil; // Delete realm files for that configuration [RLMRealm deleteFilesForConfiguration:configuration error:&error]; if (error) { // Handle error }
Puede eliminar los .realm .note .management archivos, y de una configuración determinada con el método de clase Realm.deleteFiles(for:).
autoreleasepool { // all Realm usage here -- explicitly guarantee // that all realm objects are deallocated // before deleting the files } do { let app = App(id: APPID) let user = try await app.login(credentials: Credentials.anonymous) var configuration = user.flexibleSyncConfiguration() _ = try Realm.deleteFiles(for: configuration) } catch { // handle error }
Eliminar un Archivo Realm Durante un Restablecimiento del Cliente
Al usar la Sincronización de dispositivos, podría aparecer un error de restablecimiento del cliente. Durante este proceso, la aplicación debe eliminar la copia local del dominio y descargar una versión actualizada desde el backend de Atlas App Services.
Dado que los dominios sincronizados se almacenan localmente y pueden usarse sin conexión, al eliminar un dominio sincronizado se podrían perder datos. Si el cliente ha escrito en el dominio y este no ha cargado los cambios, el cliente perderá esos datos al eliminar el dominio sincronizado. Es posible que el dominio no pueda cargar los cambios si el cliente no tiene conexión a la red durante un período prolongado o si se produce un error de sincronización que requiera reiniciar la sincronización.
Para obtener más detalles sobre cómo gestionar este escenario, consulta restablecimiento del cliente.