Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

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:

For a complete example app with a working Sync error handler implementation, create a template app and check out the SwiftUI client. The error handler implementation is in the App.swift file.

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 {
@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
}
}
}
}

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-o 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
@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 ?? "")
}
}
}
}

Em seguida, na exibição em que você está observando o Realm App, pode usar o manipulador de erros como @EnvironmentObject para reagir aos 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 {
@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")
}
}

Voltar

Filtre dados

Próximo

Sincronizar dados em segundo plano