2017-10-17 15 views
0

iPhoneアプリからWatchKitアプリへの文字列を共有しようとしています。 iOSアプリとWatchKit拡張の両方でApp Groupsを有効にしました。その後、私のiOSアプリでは、私がiPhoneからWatchKit Appへの文字列の送信

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

が続いViewControllerで、私は、TextFieldのテキストから文字列にデフォルト値を設定し... UserDefaultsのための変数を設定...

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

iOSアプリの中で、これは完全に動作し、これにアクセスして正しい値を得ることができます。しかし、WatchKitアプリ内で、私は、文字列...

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

しかしstring戻りnilを取得しよう。たくさんのチュートリアルを見てきましたが、各ターゲットに同じグループID、異なるバンドルID、およびentitlement.plistファイルが正しいことを確認しました。あなたは助けてもらえますか?

+1

WatchConnectivityフレームワークを使用する必要があります。携帯電話と時計は、時計1よりもアプリグループ経由で共有できませんでした – dan

答えて

0

UserDefaults時計アプリの拡張機能では、アプリグループは機能しません。 WCSessionを使用してapplicationContextを時計に送信してから時計の中でその値をUserDefaultsに設定する必要があります。

たとえばiPhoneの場合、WCSession.defaultを有効にし、try WCSession.default.updateApplicationContext(applicationContext)と入力してください。applicationContext[String : Any]です。エクステンションがフォアグラウンドにある場合、またはアプリケーションの次回起動時にエクステンションに配信される場合、アプリケーションコンテキストはウォッチに送信されます。デフォルトのセッションをアクティブ化、時計アプリの拡張コンテキストに対応するために

は、新しいアプリケーションのコンテキストを受信するためのデリゲートとして自分自身を宣言します

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

やや時代遅れの例では、here見つけることができます。プロセスは変わりませんが、コードは更新されていません。

関連する問題