ios - descargar - xcode for windows
WatchKit SDK no recupera datos de NSUserDefaults (2)
Quería hacer una aplicación de prueba para el reloj de Apple en la que pueda configurar algunos String en su teléfono y luego se mostrará en el Apple Watch. Decidí usar la clase NSUserDefaults para almacenar estos datos.
En mi controlador de vista para el iPhone tengo un método que toma la entrada y la almacena en el almacenamiento local:
- (IBAction)saveInfo:(id)sender {
NSString *userInput = [myTextField text];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:userInput forKey:@"savedUserInput"];
[defaults synchronize];
self.myLabel.text = [defaults stringForKey:@"savedUserInput"];
}
Y en mi controlador de interfaz de reloj tengo un método que recupera los datos y los muestra:
- (IBAction)showText2 {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults synchronize];
self.myLabel2.text = [defaults stringForKey:@"savedUserInput"];
}
Excepto por algún motivo, los datos que intento recuperar se muestran como nulos y la etiqueta no se está actualizando.
+standardUserDefaults
devuelve un objeto NSUserDefaults
que solo guarda información para el proceso actual.
Si desea crear un objeto NSUserDefaults
que comparte datos entre su aplicación iOS y una de sus extensiones, deberá configurar un contenedor de grupo de aplicaciones y usarlo como base para compartir información.
De la documentación enlazada:
Después de habilitar los grupos de aplicaciones, una extensión de la aplicación y su aplicación contenedora pueden usar la API NSUserDefaults para compartir el acceso a las preferencias del usuario. Para habilitar este uso compartido, use el método initWithSuiteName: para crear una instancia de un nuevo objeto NSUserDefaults, pasando el identificador del grupo compartido. Por ejemplo, una extensión Compartir podría actualizar la cuenta de uso compartido más reciente del usuario, utilizando un código como este:
// Create and share access to an NSUserDefaults object. NSUserDefaults *mySharedDefaults = [[NSUserDefaults alloc] initWithSuiteName:@"group.com.example.domain.MyShareExtension"]; // Use the shared user defaults object to update the user''s account. [mySharedDefaults setObject:theAccountName forKey:@"lastAccountName"];
NOTA: Con watch OS2 ya no puede usar contenedores de grupos compartidos.
IMPORTANTE
Con el reloj OS2 ya no puedes usar contenedores de grupos compartidos. Necesitas usar esta answer desbordamiento de pila.
"Para OS2, deberá usar los marcos de WatchConnectivity e implementar WCSessionDelegate".