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

    宣言

    Swift

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

    パラメーター

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

    宣言

    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にフォールバックします。 サーバーで [クライアントリカバリ] 設定が有効になっていない場合、リカバリ統合は失敗します。 互換性のないスキーマ変更が発生した場合にも統合が失敗する可能性があります。

    次も参照してください

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

    宣言

    Swift

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

    パラメーター

    afterReset

    クライアント リセット プロセスが発生した後に呼び出される関数。

    before

    クライアントがリセットされる前のローカル Realm 状態の固定コピー。

    after

    クライアントがリセットされた後の Realm のライブ インスタンス。

  • クライアント デバイスは、サーバーの最新バージョンを反映するオブジェクトを含む Realm をダウンロードします。 クライアントのリセットが発生する前からのローカルな変更とサーバー バージョンを統合するために、リカバリ プロセスがローカルで実行されます。

    変更は次のルールに統合されます。

    1. クライアントがリセットされる前に同期されなかったローカルで作成されたオブジェクトが統合されます。
    2. オブジェクトがサーバー上で削除されたがクライアント上で変更された場合は、削除が優先され、更新は破棄されます
    3. サーバーではなくクライアントでオブジェクトが削除された場合、クライアント削除手順が適用されます。
    4. 同じフィールドへの更新が競合する場合は、クライアント更新が適用されます。

    リカバリ統合が失敗した場合、クライアント リセット プロセスは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...
        }
    }
    }))
    

    宣言

    Swift

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

    パラメーター

    afterReset

    クライアント リセット プロセスが発生した後に呼び出される関数。

    before

    クライアントがリセットされる前のローカル Realm 状態の固定コピー。

    after

    クライアントがリセットされた後の Realm のライブ インスタンス。

  • 次も参照してください

    RLMClientResetModeManual

    手動クライアント リセット モード ハンドラーは、次の 2 か所で設定できます。

    1. ClientResetMode 列挙型の ErrorReportingBlock 引数として使用されます(` ErrorReportingBlock? = nil`)。
    2. SyncManager.errorHandlerプロパティの ErrorReportingBlock として。
    3. 次も参照してください

      RLMSyncManager.errorHandler

    RLMSyncErrorClientResetError中に実行されるブロックは次のルールによって決定されます

    • ClientResetModeSyncManagerにエラー報告ブロックが設定されている場合、 ClientResetModeブロックが実行されます。
    • エラー報告ブロックがClientResetModeまたはSyncManagerのいずれかに設定されており、両方に設定されていない場合は、単一のブロックが実行されます。
    • どちらの場所にもブロックが設定されていない場合は、クライアントリセットは処理されません。 アプリケーションを再起動する必要がある可能性が高く、同期されていないローカルの変更が失われる可能性があります。

    注意

    SyncManager.errorHandlerは、 RLMSyncErrorClientResetError除くすべてのRLMSyncErrorで引き続き呼び出されます。

    次も参照してください

    すべてのリストについては、 readAlson RLMSyncErrorを参照してください。

    宣言

    Swift

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