Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

SwiftUI で同期エラーの処理 - Swift SDK

項目一覧

  • 同期エラーの処理

Device Sync を使用するアプリケーションを開発する際には、エラー ハンドラーを設定する必要があります。 このエラー ハンドラーは、失敗した同期関連の API 呼び出しを検出し、応答します。

Tip

以下も参照してください。

動作する同期エラー ハンドラーを実装した完全なサンプルアプリについては、 がテンプレート アプリを作成、 SwiftUI クライアントをチェックアウトします。 エラー ハンドラーの実装はApp.swiftファイルにあります。

同期エラー ハンドラーの SwiftUI 対応実装には、潜在的なエラーを含めるために、任意の@Published変数を使用して ObservableObjectを作成します。 このハンドラーはSyncManagerを使用してエラーをリッスンします。 SyncManagerはタイプSyncErrorのエラーを報告し、他の接続の問題も報告します。

詳細については、基礎となる Objective-C RMSyncError を参照してください。

final class ErrorHandler: ObservableObject {
@Published 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
@StateObject 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 {
@ObservedObject var app: RealmSwift.App
// Use the error handler that you injected into the environment
@EnvironmentObject var errorHandler: ErrorHandler
var body: some View {
Text("You might log users in or handle errors in this view")
}
}

戻る

フィルター データ