es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Sincronizar los datos de iOS y WatchOS con UserDefaults

No estoy familiarizado con UserDefaults y quería intentarlo, así que configuré el almacenamiento de todos mis datos en una clase de UserDefaults (como se muestra).

Pero cuando fui a leer mis datos en la aplicación iOS y la aplicación WatchOS, es como si cada una tuviera una copia independiente de los datos que no afecta a la otra. Es decir, tendré una matriz de cadenas de tareas persistente guardadas en el reloj, pero la versión del teléfono seguirá diciendo que la matriz está vacía. ¿Cómo hago que se sincronicen como uno?

Por cierto, en mis ContentViews leo los datos almacenados solo usando un ObservedObject de la siguiente manera.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que los datos no se están sincronizando entre la app de iOS y la app de WatchOS porque cada una está utilizando su propia instancia de la clase UserSettings. Para sincronizarlas como una sola, se puede utilizar una instancia compartida de la clase UserSettings. Una forma de hacer esto es crear un objeto singleton para la clase UserSettings que puedan utilizar tanto la app de iOS como la app de WatchOS.

    Para crear un objeto singleton, se puede agregar una propiedad estática a la clase UserSettings que contenga la instancia compartida. Aquí tienes una forma de modificar la clase UserSettings para crear un singleton:

    class UserSettings: ObservableObject {
        static let shared = UserSettings() // agrega esta línea para crear una instancia compartida singleton
    
        // ... resto del código de UserSettings...
    }
    

    Al agregar esta propiedad estática, se puede acceder a la instancia compartida desde la app de iOS y la app de WatchOS de esta forma:

    // app de iOS
    @ObservedObject var userSettings = UserSettings.shared
    
    // app de WatchOS
    @ObservedObject var userSettings = WKInterfaceController.page1.userSettings
    // asumiendo que page1 es el WKInterfaceController que contiene la propiedad userSettings
    

    Al utilizar la misma instancia compartida de la clase UserSettings, los datos deberían sincronizarse entre la app de iOS y la app de WatchOS.

Comments are closed.