Lectura NSUserDefaults en watchOS 2 (Sé que los grupos de aplicaciones no funcionan)

La documentation de Apple dice: "Además, iOS reenvía automáticamente una copy de solo lectura de las preferences de su aplicación iOS a Apple Watch. Su extensión WatchKit puede leer esas preferences utilizando un object NSUserDefaults …" . https://developer.apple.com/library/prerelease/watchos/documentation/General/Conceptual/WatchKitProgrammingGuide/SharingData.html#//apple_ref/doc/uid/TP40014969-CH29-SW1

Pero no puedo leer los valores pnetworkingeterminados en mi aplicación WatchKit que se saveon en mi aplicación de iPhone. ¿Estoy haciendo algo mal?

En la aplicación WatchKit, ¿puedo save hasta (solo un reloj WatchKit) por defecto, o incluso eso no funciona?

Data iPhone:

 let defaults = NSUserDefaults.standardUserDefaults() defaults.setObject(dataArray, forKey: "DataSaved" 

Mira ExtensionDelegate :

 let defaults = NSUserDefaults.standardUserDefaults() print(defaults.arrayForKey("DataSaved")) print(defaults.objectForKey("DataSaved")) 

arrayForKey y objectForKey para imprimir nil .

Debo estar haciendo algo mal, ¿sabes lo que sería?

Solutions Collecting From Web of "Lectura NSUserDefaults en watchOS 2 (Sé que los grupos de aplicaciones no funcionan)"

Diferencia entre NSUserDefaults

NSUserDefaults es una unidad de memory en cualquier dispositivo, por lo que es completamente diferente en iOS y watchOS, así como en tvOS, etc.

Por ejemplo, si ejecuta un código que agrega una nueva key llamada "key1" a NSUserDefaults en iOS (suponiendo que está utilizando NSUserDefaults.standardUserDefaults() ), cuando solicita leer sus datos en watchOS, le proporciona un dictionary vacío.

Esto se debe a que, la primera vez, almacena el dictionary solo en iOS App Target y no en un espacio compartido entre dos dispositivos. Cuando la extensión WatchKit quiere usar NSUserDefaults , lee el dictionary (vacío) guardado en el Objetivo WatchKit y no el dictionary (lleno) en iOS Target.

Compartir datos

Existen algunas forms de compartir dictionarys entre watchOS e iOS:

1- Utilizando el framework WatchConnectivity en watchOS 2, puede pasar datos entre dos objectives. Puede usar sendMessage o funciones similares en WCSession classs de WCSession para hacerlo. Simplemente no olvide agregar WCSessionDelegate a su InterfaceController (en watchOS) o ViewController (en iOS), classs y delegates de aplicaciones para que la aplicación pueda recibir datos de WatchConnectivity .

2- Utilizando almacenamiento en línea / en la nube, puede cargar el dictionary desde la aplicación iOS allí y luego downloadlo a la aplicación watchOS. Sin embargo, esto necesita una connection a Internet y no es adecuado en muchos casos, por ejemplo, si su aplicación no necesita conectarse a Internet para realizar otras tareas y forzar al usuario a conectarse a Internet solo para sincronizar una dictionary simple entre los dos objectives.

3- Usando los grupos de aplicaciones (si está usando watchOS 1), que no lo describo más, porque está desactualizado y es probable que no desee que su aplicación sea solo watchOS 1.

Conclusión

1- NSUserDefaults devuelve dos dictionarys diferentes en watchOS e iOS, respectivamente.

2- Para compartir datos entre watchOS e iOS, puede usar WatchConnectivity , Internet (no recomendado) y Grupos de aplicaciones (en watchOS 1).

Más resources

Para get más detalles sobre WatchConnectivity , la respuesta moderna a su pregunta, debe consultar Apple Documentation en Apple Developer Portal .

También debería ver esta session WWDC hablando de este excelente marco incluido en watchOS 2.

Lo siento. No puede leer ningún valor pnetworkingeterminado en la aplicación WatchKit, ya que desde watchOS2 tiene su propia memory para usar. así que no puedes acceder al valor de NSUserDefaults de iOS en watchOS

Debe usar WatchConnectivity para compartir datos para el reloj OS2.

Para que quede claro, NSUserDefaults.standardUserDefaults() le dará dos dictionarys diferentes al llamar al reloj y al teléfono.

Para WatchConnectivity, visite https://developer.apple.com/videos/play/wwdc2015/713/

Apple docs:

https://developer.apple.com/library/watchos/documentation/WatchConnectivity/Reference/WatchConnectivity_framework/index.html