SwiftUI で同期エラーの処理 - Swift SDK
項目一覧
同期エラーの処理
Device Sync を使用するアプリケーションを開発する際には、エラー ハンドラーを設定する必要があります。 このエラー ハンドラーは、失敗した同期関連の API 呼び出しを検出し、応答します。
Tip
以下も参照してください。
動作する同期エラー ハンドラーを実装した完全なサンプルアプリについては、 がテンプレート アプリを作成し、 SwiftUI クライアントをチェックアウトします。 エラー ハンドラーの実装はApp.swift
ファイルにあります。
同期エラー ハンドラーの SwiftUI 対応実装には、潜在的なエラーを含めるために、任意の@Published
変数を使用して ObservableObject
を作成します。 このハンドラーはSyncManagerを使用してエラーをリッスンします。 SyncManager
はタイプSyncError
のエラーを報告し、他の接続の問題も報告します。
詳細については、基礎となる Objective-C RMSyncError を参照してください。
final class ErrorHandler: ObservableObject { var error: Swift.Error? init(app: RealmSwift.App) { // Sync Manager listens for sync errors. app.syncManager.errorHandler = { error, syncSession in if let error = error as? SyncError { /* Handle specific SyncError cases, or use a switch * statement to handle all Sync error codes. * In this case, ignore a .connectionFailed error and * continue executing the app code. */ if error.code == .connectionFailed { return } self.error = error } else if let error = error as? POSIXError { /* The error handler may also report NSError types to * allow for error handling in a platform-idiomatic way. * In this case, handle a connection timeout error as * an .ETIMEDOUT error in the POSIXError domain. */ if error.code == .ETIMEDOUT { return } self.error = error } } } }
Tip
一般的な Device Sync エラーのリストとその処理方法については、App Services Device Sync ドキュメントの「同期エラー 」を参照してください。
エラー ハンドラーを@StateObject
として初期化します。 これを環境オブジェクトとしてビュー階層に挿入します。 この例では、同期エラーが発生したときにユーザーに.alert
が表示されています。
let app = App(id: flexibleSyncAppId) @main struct realmSwiftUIApp: SwiftUI.App { // Initialize the error handler var errorHandler = ErrorHandler(app: app) var body: some Scene { WindowGroup { NextView(app: app) // Inject the error handler as an environment object .environmentObject(errorHandler) // Display an alert to the user containing the error when a Sync error occurs .alert(Text("Error"), isPresented: .constant(errorHandler.error != nil)) { Button("OK", role: .cancel) { errorHandler.error = nil } } message: { Text(errorHandler.error?.localizedDescription ?? "") } } } }
次に、 Realm App
を監視しているビューで、エラー ハンドラーを @EnvironmentObject
として使用してReact to Sync エラーを実行できます。 ここで発生したエラーは、上記のビューで設定された.alert
を使用して、 ユーザーのアラートを表示します。
struct NextView: View { var app: RealmSwift.App // Use the error handler that you injected into the environment var errorHandler: ErrorHandler var body: some View { Text("You might log users in or handle errors in this view") } }