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... } } }))
声明
参数
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... } } }))
声明
参数
afterReset
发生客户端重置重置进程后调用的函数。
before
客户端重置之前本地 Realm 状态的冻结副本。
after
客户端重置后 Realm 的实时实例。
-
客户端设备将下载一个 Realm,该 Realm 反映客户端重置后服务器的最新状态。 在本地运行恢复进程,尝试将服务器版本与客户端重置发生之前的任何本地更改集成。
这些更改与以下规则集成:
- 在客户端重置之前未同步的本地创建的对象将被集成。
- 如果一个对象已在服务器上被删除,但在客户端上被修改,则删除操作优先,更新操作被丢弃
- 如果在客户端而非服务器上删除了对象,则应用客户端删除指令。
- 如果对同一字段的更新发生冲突,则应用客户端更新。
如果恢复集成失败,客户端重置进程将回退到
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... } } }))
声明
参数
afterReset
发生客户端重置重置进程后调用的函数。
before
客户端重置之前本地 Realm 状态的冻结副本。
after
客户端重置后 Realm 的实时实例。
-
客户端设备将下载一个域,其中包含反映最新服务器版本的对象。在本地运行恢复进程,尝试将服务器版本与客户端重置发生之前的任何本地更改集成。
这些更改与以下规则集成:
- 在客户端重置之前未同步的本地创建的对象将被集成。
- 如果一个对象已在服务器上被删除,但在客户端上被修改,则删除操作优先,更新操作被丢弃
- 如果在客户端而非服务器上删除了对象,则应用客户端删除指令。
- 如果对同一字段的更新发生冲突,则应用客户端更新。
如果恢复集成失败,客户端重置进程将回退到
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... } } }))
声明
参数
afterReset
发生客户端重置重置进程后调用的函数。
before
客户端重置之前本地 Realm 状态的冻结副本。
after
客户端重置后 Realm 的实时实例。
-
另请参阅
RLMClientResetModeManual
可以在两个位置设置手动客户端重置模式处理程序:
- 作为 ClientResetMode 枚举中的 ErrorReportingBlock 参数(“
ErrorReportingBlock?
= nil”)。 - 作为
SyncManager.errorHandler
属性中的 ErrorReportingBlock。
另请参阅
RLMSyncManager.errorHandler
在
RLMSyncErrorClientResetError
期间,执行的区块由以下规则决定- 如果在
ClientResetMode
和SyncManager
中设置了错误报告块,则将执行ClientResetMode
块。 - 如果在
ClientResetMode
或SyncManager
中设置了错误报告块,但不同时在两者中设置,则将执行单个块。 - 如果在任一位置均未设置区块,则不会处理客户端重置。 应用程序可能需要重新启动,未同步的本地更改可能会丢失。
注意
在 除SyncManager.errorHandler
RLMSyncError
RLMSyncErrorClientResetError
之外的所有 下,仍会调用 。另请参阅
另请参阅RLMSyncError
以获取详尽列表。声明
Swift
@preconcurrency case manual(errorHandler: ErrorReportingBlock? = nil)
- 作为 ClientResetMode 枚举中的 ErrorReportingBlock 参数(“