ClientResetMode

@frozen
public enum ClientResetMode

Uma enumeração usada para determinar o comportamento de recuperação de arquivos no evento de um reinício do cliente. Padrão é .recoverUnsyncedChanges.

Veja

RLMClientResetMode
  • Todas as alterações locais não sincronizadas são automaticamente descartadas e o estado local é automaticamente revertido para o estado mais recente do servidor. As alterações não sincronizadas podem ser recuperadas no bloco de chamada de resposta de reinício do cliente.

    Se o .discardLocal estiver habilitado, mas a operação de reinício do cliente não puder ser concluída, o processo de reinício do cliente será revertido para o modo manual. Exemplo: durante uma alteração de esquema destrutiva, esse modo falhará e invocará o manipulador manual de reinício do cliente.

    Veja também

    Veja também RLMClientResetBeforeBlock exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges({ before in
    var recoveryConfig = Realm.Configuration()
    recoveryConfig.fileURL = myRecoveryPath
    do {
       before.writeCopy(configuration: recoveryConfig)
       // The copied realm could be used later for recovery, debugging, reporting, etc.
    } catch {
       // handle error
    }
    }, nil))
    

    Veja também

    Veja também RLMClientResetAfterBlock

    Exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges( nil, { before, after in
    // This block could be used to add custom recovery logic, back-up a realm file, send reporting, etc.
    for object in before.objects(myClass.self) {
        let res = after.objects(myClass.self)
        if (res.filter("primaryKey == %@", object.primaryKey).first != nil) {
            // ...custom recovery logic...
        } else {
            // ...custom recovery logic...
        }
    }
    }))
    

    Declaração

    Swift

    @preconcurrency
    case discardLocal(beforeReset: (@Sendable (_ before: Realm) -> Void)? = nil,
                      afterReset: (@Sendable (_ before: Realm, _ after: Realm) -> Void)? = nil)

    Parâmetros

    afterReset

    uma função invocada após o processo de reinício do cliente ter ocorrido.

    before

    uma cópia congelada do estado do Realm local antes do reinício do cliente.

    after

    uma instância ao vivo do Realm após o reinício do cliente.

  • Todas as alterações locais não sincronizadas são automaticamente descartadas e o estado local é automaticamente revertido para o estado mais recente do servidor. As alterações não sincronizadas podem ser recuperadas no bloco de chamada de resposta de reinício do cliente.

    Se o .discardUnsyncedChanges estiver habilitado, mas a operação de reinício do cliente não puder ser concluída, o processo de reinício do cliente será revertido para o modo manual. Exemplo: durante uma alteração de esquema destrutiva, esse modo falhará e invocará o manipulador manual de reinício do cliente.

    Veja também

    Veja também RLMClientResetBeforeBlock exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges({ before in
    var recoveryConfig = Realm.Configuration()
    recoveryConfig.fileURL = myRecoveryPath
    do {
       before.writeCopy(configuration: recoveryConfig)
       // The copied realm could be used later for recovery, debugging, reporting, etc.
    } catch {
       // handle error
    }
    }, nil))
    

    Veja também

    Veja também RLMClientResetAfterBlock

    Exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges( nil, { before, after in
    // This block could be used to add custom recovery logic, back-up a realm file, send reporting, etc.
    for object in before.objects(myClass.self) {
        let res = after.objects(myClass.self)
        if (res.filter("primaryKey == %@", object.primaryKey).first != nil) {
            // ...custom recovery logic...
        } else {
            // ...custom recovery logic...
        }
    }
    }))
    

    Declaração

    Swift

    @preconcurrency
    case discardUnsyncedChanges(beforeReset: (@Sendable (_ before: Realm) -> Void)? = nil,
                                afterReset: (@Sendable (_ before: Realm, _ after: Realm) -> Void)? = nil)

    Parâmetros

    afterReset

    uma função invocada após o processo de reinício do cliente ter ocorrido.

    before

    uma cópia congelada do estado do Realm local antes do reinício do cliente.

    after

    uma instância ao vivo do Realm após o reinício do cliente.

  • O dispositivo cliente baixará um Realm que reflete o estado mais recente do servidor após um reinício do cliente. Um processo de recuperação é executado localmente em uma tentativa de integrar a versão do servidor com quaisquer alterações locais anteriores à ocorrência do reinício do cliente.

    As alterações são integradas com as seguintes regras:

    1. Objeto criados localmente que não foram sincronizados antes do reinício do cliente serão integrados.
    2. Se um objeto foi excluído no servidor, mas foi modificado no cliente, a exclusão terá precedência e a atualização será descartada
    3. Se um objeto foi excluído no cliente, mas não no servidor, a instrução de exclusão do cliente será aplicada.
    4. No caso de atualizações conflitantes no mesmo campo, a atualização do cliente é aplicada.

    Se a integração de recuperação falhar, o processo de reinício do cliente voltará para ClientResetMode.manual. A integração de recuperação falhará se a configuração “Recuperação de Cliente” não estiver habilitada no servidor. A integração também pode falhar no evento de uma alteração de esquema incompatível.

    Veja também

    Veja também RLMClientResetBeforeBlock exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges({ before in
    var recoveryConfig = Realm.Configuration()
    recoveryConfig.fileURL = myRecoveryPath
    do {
       before.writeCopy(configuration: recoveryConfig)
       // The copied realm could be used later for recovery, debugging, reporting, etc.
    } catch {
       // handle error
    }
    }, nil))
    

    Veja também

    Veja também RLMClientResetAfterBlock

    Exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges( nil, { before, after in
    // This block could be used to add custom recovery logic, back-up a realm file, send reporting, etc.
    for object in before.objects(myClass.self) {
        let res = after.objects(myClass.self)
        if (res.filter("primaryKey == %@", object.primaryKey).first != nil) {
            // ...custom recovery logic...
        } else {
            // ...custom recovery logic...
        }
    }
    }))
    

    Declaração

    Swift

    @preconcurrency
    case recoverUnsyncedChanges(beforeReset: (@Sendable (_ before: Realm) -> Void)? = nil,
                                afterReset: (@Sendable (_ before: Realm, _ after: Realm) -> Void)? = nil)

    Parâmetros

    afterReset

    uma função invocada após o processo de reinício do cliente ter ocorrido.

    before

    uma cópia congelada do estado do Realm local antes do reinício do cliente.

    after

    uma instância ao vivo do Realm após o reinício do cliente.

  • O dispositivo cliente baixará um Realm com objeto que refletem a versão mais recente do servidor. Um processo de recuperação é executado localmente em uma tentativa de integrar a versão do servidor com quaisquer alterações locais anteriores à ocorrência do reinício do cliente.

    As alterações são integradas com as seguintes regras:

    1. Objeto criados localmente que não foram sincronizados antes do reinício do cliente serão integrados.
    2. Se um objeto foi excluído no servidor, mas foi modificado no cliente, a exclusão terá precedência e a atualização será descartada
    3. Se um objeto foi excluído no cliente, mas não no servidor, a instrução de exclusão do cliente será aplicada.
    4. No caso de atualizações conflitantes no mesmo campo, a atualização do cliente é aplicada.

    Se a integração de recuperação falhar, o processo de reinício do cliente voltará para ClientResetMode.discardUnsyncedChanges. A integração de recuperação falhará se a configuração “Recuperação de Cliente” não estiver habilitada no servidor. A integração também pode falhar no evento de uma alteração de esquema incompatível.

    Veja também

    Veja também RLMClientResetBeforeBlock exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges({ before in
    var recoveryConfig = Realm.Configuration()
    recoveryConfig.fileURL = myRecoveryPath
    do {
       before.writeCopy(configuration: recoveryConfig)
       // The copied realm could be used later for recovery, debugging, reporting, etc.
    } catch {
       // handle error
    }
    }, nil))
    

    Veja também

    Veja também RLMClientResetAfterBlock

    Exemplo de uso

    user.configuration(partitionValue: "myPartition", clientResetMode: .discardUnsyncedChanges( nil, { before, after in
    // This block could be used to add custom recovery logic, back-up a realm file, send reporting, etc.
    for object in before.objects(myClass.self) {
        let res = after.objects(myClass.self)
        if (res.filter("primaryKey == %@", object.primaryKey).first != nil) {
            // ...custom recovery logic...
        } else {
            // ...custom recovery logic...
        }
    }
    }))
    

    Declaração

    Swift

    @preconcurrency
    case recoverOrDiscardUnsyncedChanges(beforeReset: (@Sendable (_ before: Realm) -> Void)? = nil,
                                         afterReset: (@Sendable (_ before: Realm, _ after: Realm) -> Void)? = nil)

    Parâmetros

    afterReset

    uma função invocada após o processo de reinício do cliente ter ocorrido.

    before

    uma cópia congelada do estado do Realm local antes do reinício do cliente.

    after

    uma instância ao vivo do Realm após o reinício do cliente.

  • Veja também

    RLMClientResetModeManual

    O manipulador do modo de reinício do cliente manual pode ser definido em dois locais:

    1. Como um argumento ErrorReportingBlock na enumeração ClientResetMode (' ErrorReportingBlock? = nil').
    2. Como um ErrorReportingBlock na propriedade SyncManager.errorHandler .
    3. Veja também

      RLMSyncManager.errorHandler

    Durante um RLMSyncErrorClientResetError o bloqueio executado é determinado pelas seguintes regras

    • Se um bloco de relatório de erros for definido em ClientResetMode e o SyncManager, o bloco ClientResetMode será executado.
    • Se um bloco de relatório de erros for definido no ClientResetMode ou no SyncManager, mas não em ambos, o bloco único será executado.
    • Se nenhum bloco for definido em nenhum dos locais, a redefinição do cliente não será tratada. O aplicativo provavelmente precisará ser reiniciado e as alterações locais não sincronizadas poderão ser perdidas.

    Observação

    O SyncManager.errorHandler ainda é invocado em todos os RLMSyncErrors diferentes de RLMSyncErrorClientResetError.

    Veja também

    veja também RLMSyncError para uma lista exaustiva.

    Declaração

    Swift

    @preconcurrency
    case manual(errorHandler: ErrorReportingBlock? = nil)