ClientResetMode
@frozen
public enum ClientResetMode
クライアントがリセットされた場合のファイル回復動作を決定するために使用される列挙型。 デフォルトは.recoverUnsyncedChanges
です。
詳細は、次を参照してください:
RLMClientResetMode
-
同期されていないすべてのローカル変更は自動的に破棄され、ローカル状態はサーバーからの最新の状態に自動的に戻ります。 同期されていない変更は、クライアントと リセット後のコールバック ブロックで回復できます。
.discardLocal
が有効になっているがクライアント リセット操作が完了しない場合、クライアント リセット プロセスは手動モードに戻ります。 例: スキーマの破壊的な変更中に、このモードは失敗し、手動クライアント リセット ハンドラーが呼び出されます。次も参照してください
readAlson
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
が有効になっているがクライアント リセット操作が完了しない場合、クライアント リセット プロセスは手動モードに戻ります。 例: スキーマの破壊的な変更中に、このモードは失敗し、手動クライアント リセット ハンドラーが呼び出されます。次も参照してください
readAlson
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
にフォールバックします。 サーバーで [クライアントリカバリ] 設定が有効になっていない場合、リカバリ統合は失敗します。 互換性のないスキーマ変更が発生した場合にも統合が失敗する可能性があります。次も参照してください
readAlson
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 をダウンロードします。 クライアントのリセットが発生する前からのローカルな変更とサーバー バージョンを統合するために、リカバリ プロセスがローカルで実行されます。
変更は次のルールに統合されます。
- クライアントがリセットされる前に同期されなかったローカルで作成されたオブジェクトが統合されます。
- オブジェクトがサーバー上で削除されたがクライアント上で変更された場合は、削除が優先され、更新は破棄されます
- サーバーではなくクライアントでオブジェクトが削除された場合、クライアント削除手順が適用されます。
- 同じフィールドへの更新が競合する場合は、クライアント更新が適用されます。
リカバリ統合が失敗した場合、クライアント リセット プロセスは
ClientResetMode.discardUnsyncedChanges
にフォールバックします。 サーバーで [クライアントリカバリ] 設定が有効になっていない場合、リカバリ統合は失敗します。 互換性のないスキーマ変更が発生した場合にも統合が失敗する可能性があります。次も参照してください
readAlson
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
手動クライアント リセット モード ハンドラーは、次の 2 か所で設定できます。
- ClientResetMode 列挙型の ErrorReportingBlock 引数として使用されます(`
ErrorReportingBlock?
= nil`)。 SyncManager.errorHandler
プロパティの ErrorReportingBlock として。
次も参照してください
RLMSyncManager.errorHandler
RLMSyncErrorClientResetError
中に実行されるブロックは次のルールによって決定されますClientResetMode
とSyncManager
にエラー報告ブロックが設定されている場合、ClientResetMode
ブロックが実行されます。- エラー報告ブロックが
ClientResetMode
またはSyncManager
のいずれかに設定されており、両方に設定されていない場合は、単一のブロックが実行されます。 - どちらの場所にもブロックが設定されていない場合は、クライアントリセットは処理されません。 アプリケーションを再起動する必要がある可能性が高く、同期されていないローカルの変更が失われる可能性があります。
注意
SyncManager.errorHandler
は、RLMSyncErrorClientResetError
を除くすべてのRLMSyncError
で引き続き呼び出されます。次も参照してください
すべてのリストについては、 readAlsonRLMSyncError
を参照してください。宣言
Swift
@preconcurrency case manual(errorHandler: ErrorReportingBlock? = nil)
- ClientResetMode 列挙型の ErrorReportingBlock 引数として使用されます(`