2017-10-17 7 views
0

J'essaie de partager une chaîne de mon application iPhone à mon application WatchKit. J'ai activé App Groups pour l'application iOS et l'extension WatchKit. Puis, dans mon application iOS, je définir une variable pour les UserDefaults ...Envoyer une chaîne de l'iPhone à l'application WatchKit

let defaults = UserDefaults(suiteName: "group.com.jacobcavin.appName") 

Ensuite, dans le ViewController, je mis par défaut à une chaîne à partir du texte d'un TextField ...

defaults?.set(textField.text!, forKey: "KEY") 

À l'intérieur de l'application iOS, cela fonctionne parfaitement et je peux y accéder et obtenir la bonne valeur. Mais, à l'intérieur de l'application WatchKit, j'essaie d'obtenir la chaîne ...

let defaults = UserDefaults(suiteName: "group.com.jacobcavin.appName") 
let string = defaults?.string(forKey: "KEY") 

Mais string retours nil. J'ai regardé à travers des tonnes de tutoriels, et je me suis assuré que chaque cible a le même identifiant de groupe, différents identifiants de paquets, et les fichiers entitlement.plist sont corrects. Peux-tu aider s'il te plait?

+1

Vous devez utiliser le framework WatchConnectivity, le téléphone et la montre n'ont pas été en mesure de partager via des groupes d'applications depuis la veille 1 – dan

Répondre

0

Un groupe d'applications UserDefaults ne fonctionne pas avec une extension d'application de surveillance. Vous devez utiliser WCSession envoyer un applicationContext à la montre, puis dans la montre définir ces valeurs à UserDefaults.

Par exemple sur l'iPhone, vous devez activer le WCSession.default et appeler try WCSession.default.updateApplicationContext(applicationContext)applicationContext est [String : Any]. Le contexte de l'application sera envoyé à la montre si l'extension est au premier plan ou sera livrée à l'extension la prochaine fois que l'application sera lancée.

Pour répondre au contexte de la montre l'extension de l'application, activez la session par défaut vous déclarer en tant que délégué pour recevoir le nouveau contexte d'application:

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) { 
     // handle receiving application context 
     DispatchQueue.main.async 
     { 
      // Save to UserDefaults or Update UI etc. 
     } 
} 

Un exemple un peu daté se trouve here. Le processus est toujours le même mais le code n'a pas été mis à jour.