Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Excluir um arquivo de Realm - Swift SDK

Nesta página

  • Excluir um arquivo do Realm para evitar migração
  • Excluir um arquivo do Realm
  • Excluir um arquivo do Realm durante uma redefinição de cliente

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

If you delete a realm file or any of its auxiliary files while one or more instances of the realm are open, you might corrupt the realm or disrupt sync.

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)")
}

Na prática, há dois horários de segurança para excluir o arquivo de domínio:

  1. Na inicialização do aplicativo antes de abrir o domínio.

  2. 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
}

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.

Voltar

Configurar e Abrir um Domínio

Próximo

Agrupar um realm