ios swift nsuserdefaults

ios - Los valores predeterminados de usuario compartidos entre la aplicación y la extensión no funcionan correctamente



swift nsuserdefaults (1)

Así que he estado mirando alrededor y siguiendo todos los pasos para configurar los valores predeterminados de usuario compartidos correctamente, pero debería faltar algo.

Tengo la capacidad de Grupos de aplicaciones activada tanto en mi aplicación como en mi extensión. Ambos usan el mismo nombre de suite ( "group.TestSharedPreferences" ) y escribo de esta manera:

struct Preferences { static let shared = UserDefaults(suiteName: "group.TestSharedPreferences")! }

En viewDidLoad :

Preferences.shared.set(1, forKey: "INT")

Y para leer:

Preferences.shared.integer(forKey: "INT") // Returns 1 in Container App Preferences.shared.integer(forKey: "INT") // Returns 0 in Today Extension

Incluso usando la synchronize() justo después de configurar "INT" , el valor recuperado en la extensión no es el que se guardó en la aplicación del contenedor. ¿Alguna idea sobre qué podría faltar? ¡Gracias!


Yo recomendaría cavar paso a paso aquí.

Primero, asegúrese de que tanto la aplicación principal como la extensión del widget tengan habilitada la capacidad del grupo de aplicaciones y utilicen la misma y que estén activadas (la marca de verificación debe estar establecida) nombre del grupo de aplicaciones:

Aplicación principal:

Extensión del widget de hoy:

Luego haz una prueba simple con acceso directo a set / get. En el método AppDelegate.didFinishLaunchingWithOptions su aplicación principal (cambie el nombre del grupo de aplicaciones y las claves según sus necesidades):

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") { userDefaults.set("test 1" as AnyObject, forKey: "key1") userDefaults.set("test 2" as AnyObject, forKey: "key2") userDefaults.synchronize() }

En el ViewController de la extensión de tu widget de hoy:

if let userDefaults = UserDefaults(suiteName: "group.de.zisoft.GPS-Track") { let value1 = userDefaults.string(forKey: "key1") let value2 = userDefaults.string(forKey: "key2") ... }

Si esto funciona, el problema debe estar relacionado en su singleton de Preferences .