ClientResetMode

@frozen
public enum ClientResetMode

用于确定客户端重置时的文件恢复行为的枚举。默认为.recoverUnsyncedChanges

RLMClientResetMode
  • 所有未同步的本地更改都将自动丢弃,本地状态将自动恢复为来自服务器的最新状态。 然后,可以在帖子客户端重置回调块中恢复未同步的更改。

    如果已启用.discardLocal ,但无法完成客户端重置操作,则客户端重置过程将恢复为手动模式。 示例:在破坏性模式更改期间,此模式将失败并调用手动客户端重置处理程序。

    另请参阅

    另请参阅RLMClientResetBeforeBlock用法示例

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

    另请参阅

    另请参阅 RLMClientResetAfterBlock

    使用示例

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

    声明

    Swift

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

    参数

    afterReset

    发生客户端重置重置进程后调用的函数。

    before

    客户端重置之前本地 Realm 状态的冻结副本。

    after

    客户端重置后 Realm 的实时实例。

  • 所有未同步的本地更改都将自动丢弃,本地状态将自动恢复为来自服务器的最新状态。 然后,可以在帖子客户端重置回调块中恢复未同步的更改。

    如果已启用.discardUnsyncedChanges ,但无法完成客户端重置操作,则客户端重置过程将恢复为手动模式。 示例:在破坏性模式更改期间,此模式将失败并调用手动客户端重置处理程序。

    另请参阅

    另请参阅RLMClientResetBeforeBlock用法示例

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

    另请参阅

    另请参阅 RLMClientResetAfterBlock

    使用示例

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

    声明

    Swift

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

    参数

    afterReset

    发生客户端重置重置进程后调用的函数。

    before

    客户端重置之前本地 Realm 状态的冻结副本。

    after

    客户端重置后 Realm 的实时实例。

  • 客户端设备将下载一个 Realm,该 Realm 反映客户端重置后服务器的最新状态。 在本地运行恢复进程,尝试将服务器版本与客户端重置发生之前的任何本地更改集成。

    这些更改与以下规则集成:

    1. 在客户端重置之前未同步的本地创建的对象将被集成。
    2. 如果一个对象已在服务器上被删除,但在客户端上被修改,则删除操作优先,更新操作被丢弃
    3. 如果在客户端而非服务器上删除了对象,则应用客户端删除指令。
    4. 如果对同一字段的更新发生冲突,则应用客户端更新。

    如果恢复集成失败,客户端重置进程将回退到ClientResetMode.manual 。 如果服务器上未启用“客户端恢复”设置,恢复集成将失败。 如果事件不兼容的模式更改,集成也可能会失败。

    另请参阅

    另请参阅RLMClientResetBeforeBlock用法示例

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

    另请参阅

    另请参阅 RLMClientResetAfterBlock

    使用示例

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

    声明

    Swift

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

    参数

    afterReset

    发生客户端重置重置进程后调用的函数。

    before

    客户端重置之前本地 Realm 状态的冻结副本。

    after

    客户端重置后 Realm 的实时实例。

  • 客户端设备将下载一个域,其中包含反映最新服务器版本的对象。在本地运行恢复进程,尝试将服务器版本与客户端重置发生之前的任何本地更改集成。

    这些更改与以下规则集成:

    1. 在客户端重置之前未同步的本地创建的对象将被集成。
    2. 如果一个对象已在服务器上被删除,但在客户端上被修改,则删除操作优先,更新操作被丢弃
    3. 如果在客户端而非服务器上删除了对象,则应用客户端删除指令。
    4. 如果对同一字段的更新发生冲突,则应用客户端更新。

    如果恢复集成失败,客户端重置进程将回退到ClientResetMode.discardUnsyncedChanges 。 如果服务器上未启用“客户端恢复”设置,恢复集成将失败。 如果事件不兼容的模式更改,集成也可能会失败。

    另请参阅

    另请参阅RLMClientResetBeforeBlock用法示例

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

    另请参阅

    另请参阅 RLMClientResetAfterBlock

    使用示例

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

    声明

    Swift

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

    参数

    afterReset

    发生客户端重置重置进程后调用的函数。

    before

    客户端重置之前本地 Realm 状态的冻结副本。

    after

    客户端重置后 Realm 的实时实例。

  • 另请参阅

    RLMClientResetModeManual

    可以在两个位置设置手动客户端重置模式处理程序:

    1. 作为 ClientResetMode 枚举中的 ErrorReportingBlock 参数(“ ErrorReportingBlock? = nil”)。
    2. 作为SyncManager.errorHandler属性中的 ErrorReportingBlock。
    3. 另请参阅

      RLMSyncManager.errorHandler

    RLMSyncErrorClientResetError期间,执行的区块由以下规则决定

    • 如果在ClientResetModeSyncManager中设置了错误报告块,则将执行ClientResetMode块。
    • 如果在ClientResetModeSyncManager中设置了错误报告块,但不同时在两者中设置,则将执行单个块。
    • 如果在任一位置均未设置区块,则不会处理客户端重置。 应用程序可能需要重新启动,未同步的本地更改可能会丢失。

    注意

    在 除SyncManager.errorHandler RLMSyncErrorRLMSyncErrorClientResetError之外的所有 下,仍会调用 。

    另请参阅

    另请参阅RLMSyncError以获取详尽列表。

    声明

    Swift

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