Lide com erros de sincronização com o SwiftUI - Swift SDK
Nesta página
Gerenciar erros de sincronização
Ao desenvolver uma aplicação que usa o Realm Mobile Sync, você deve definir um manipulador de erros. Esse manipulador de erros detectará e responderá a quaisquer chamadas de API relacionadas à sincronização com falha.
Dica
Veja também:
Para obter um exemplo de aplicativo completo com uma implementação funcional do manipulador de erros de sincronização, crie um aplicativo de modelo e confira a interface do cliente SwiftUI . A implementação do manipulador de erros está no arquivo App.swift
.
Para uma implementação compatível com o SwiftUI de um manipulador de erros de sincronização, crie um ObservableObject
com uma variável @Published
opcional para conter um erro em potencial. Este manipulador usa o SyncManager para escutar erros. O SyncManager
relata erros do tipo SyncError
e também relata outros problemas de conexão.
Para obter mais informações, consulte o Objective-C RLMSyncError subjacente.
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 } } } }
Dica
Para obter uma lista de erros comuns do Device Sync e como gerenciá-los, consulte Erros de sincronização na documentação do Atlas App Services Device Sync .
Inicialize o manipulador de erro como @StateObject
. Injecte - se na hierarquia de visualização como um objeto de ambiente . Neste exemplo, exibimos um .alert
para o usuário quando ocorre um erro de sincronização.
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 ?? "") } } } }
Em seguida, na exibição em que você está observando o App
de Realm , pode usar o manipulador de erros como @EnvironmentObject
para React a erros de sincronização. Um erro que ocorre aqui exibe um alerta para o usuário, usando o .alert
definido na visualização acima.
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") } }