Excluir um arquivo de Realm - Swift SDK
Nesta página
Em alguns casos, você pode querer excluir completamente um arquivo de domínio do disco.
O Realm evita copiar dados para memória, exceto quando absolutamente necessário. Como resultado, todos os objetos gerenciados por um domínio têm referências ao arquivo no disco. Antes de excluir o arquivo com segurança, você deve garantir a desalocação destes objetos:
Todos os objetos lidos ou adicionados ao domínio
Todos os objetos de Lista e Resultados
Todos os objetos ThreadSafeReference
O próprio domínio
Aviso
Não exclua arquivos enquanto os domínios estiverem abertos
Se você excluir um arquivo de Realm ou qualquer um de seus arquivos auxiliares enquanto uma ou mais instâncias do Realm estiverem abertas, poderá corromper o Realm ou interromper asincronização .
Excluir um arquivo do Realm para evitar migração
Se você iterar rapidamente à medida que desenvolve seu aplicativo, convém excluir um arquivo de território em vez de migrá-lo ao fazer alterações no esquema. A configuração do Realm fornece um parâmetro deleteRealmIfMigrationNeeded para ajudar com este caso.
Quando você define essa propriedade como true
, o SDK exclui o arquivo realm quando uma migração seria necessária. Em seguida, você pode criar objetos que correspondam ao novo esquema em vez de escrever blocos de migração para dados de desenvolvimento ou teste.
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)") }
Excluir um arquivo do Realm
Na prática, há dois horários de segurança para excluir o arquivo de domínio:
Na inicialização do aplicativo antes de abrir o domínio.
Depois de apenas ter aberto o território dentro de um pool de
autorelease
explícito, o que garante a desalocação de todos os objetos dentro dele.
Você pode excluir os arquivos .realm
, .note
e .management
para uma configuração fornecida com o método de classe +[RLLMrealm 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 }
Você pode excluir os arquivos .realm
, .note
e .management
para uma configuração fornecida com o método de classe 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 }
Excluir um arquivo do Realm durante uma redefinição de cliente
Ao usar a Device Sync, você pode encontrar um erro de redefinição do cliente. Durante uma redefinição do cliente, seu aplicativo deve excluir a cópia local do território e baixar uma versão atualizada do backend do Atlas App Services.
Como os realms sincronizados são armazenados localmente e podem ser usados offline, a exclusão de um realm sincronizado pode perder dados. Se o cliente tiver gravado no realm e o realm não tiver carregado essas alterações, o cliente perderá esses dados quando você excluir o realm sincronizado. A região pode não conseguir carregar alterações quando o cliente não tem uma conexão de rede por um longo período de tempo ou no caso de um erro de sincronização que exija que você reinicie a sincronização.
Para obter mais detalhes sobre como lidar com esse cenário, consulte Redefinição de cliente.