2017-10-17 5 views
0

Ich versuche eine Zeichenfolge von meiner iPhone App an meine WatchKit App zu senden. Ich habe App Groups sowohl für die iOS-App als auch für die WatchKit-Erweiterung aktiviert. Dann in meinem iOS-App, habe ich eine Variable für die UserDefaults ...String vom iPhone zur WatchKit App senden

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

dann im ViewController, habe ich standardmäßig eine Zeichenfolge aus dem Text eines TextField- ...

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

Innerhalb der iOS App funktioniert das perfekt und ich kann darauf zugreifen und den richtigen Wert erhalten. Aber innerhalb der WatchKit app, ich versuche, um die Zeichenfolge zu bekommen ...

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

Aber string kehrt nil. Ich habe viele Tutorials durchgesehen und sichergestellt, dass jedes Ziel die gleiche Gruppenkennung, verschiedene Paket-IDs und die entitlement.plist Dateien hat. Können Sie bitte helfen?

+1

Sie müssen das WatchConnectivity-Framework verwenden, das Telefon und Uhr konnten nicht über App-Gruppen seit Watch OS 1 teilen – dan

Antwort

0

Eine App-Gruppe UserDefaults funktioniert nicht mit einer Watch-App-Erweiterung. Sie müssen senden Sie eine applicationContext an die Uhr und dann in der Uhr setzen Sie diese Werte auf UserDefaults.

Zum Beispiel auf dem iPhone würden Sie die WCSession.default aktivieren und try WCSession.default.updateApplicationContext(applicationContext) anrufen, wobei applicationContext[String : Any] ist. Der Anwendungskontext wird an die Überwachung gesendet, wenn sich die Erweiterung im Vordergrund befindet oder beim nächsten Start der App an die Erweiterung gesendet wird.

auf den Kontext in der Uhr App-Erweiterung, aktivieren Sie die Standardsitzung erklären Sie sich als Delegierten reagieren, um den neuen Anwendungskontext zu erhalten:

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

Ein etwas veraltet Beispiel finden here. Der Prozess ist immer noch der gleiche, aber der Code wurde nicht aktualisiert.

Verwandte Themen