swift初学者です。
現在、AppleWatchとiPhoneの連動したアプリの開発を行なっています。
具体的には、AppleWatchにてボタンを押したら現在時刻を取得し、そのデータをラベルで表示。そのテキストデータをiPhoneの親アプリと共有したいと思っています。
データの共有方法として、Watch Connectivityのフレームワークを使用しているのですが、うまくデータが反映されず詰まってしまったため相談をしたいです。
プログラムは下記の通りです。
ViewController
1import UIKit 2import WatchConnectivity 3 4class ViewController: UIViewController,WCSessionDelegate { 5 func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { 6 7 } 8 9 func sessionDidBecomeInactive(_ session: WCSession) { 10 11 } 12 13 func sessionDidDeactivate(_ session: WCSession) { 14 15 } 16 17 //Apple Watchからデータの取得 18 func session (_ session: WCSession, didReceiveMessage message: [String : Any],replyHandler:@escaping ([String : AnyObject]) -> Void){ 19 guard case let message = ["sendTime1"] as? String else { 20 return 21 } 22 DispatchQueue.main.async(){ 23 24 25 self.time1.text = message 26 } 27 let reply = ["answer" : ""] 28 29 } 30 31 //ラベル アウトレット 32 @IBOutlet weak var time1: UILabel! 33 34 35 override func viewDidLoad() { 36 super.viewDidLoad() 37 // Do any additional setup after loading the view. 38 39 //WCSession セットアップ 40 if (WCSession.isSupported()){ 41 let session = WCSession.default 42 session.delegate = self 43 session.activate() 44 } 45 } 46 47 48} 49 50 51
InterfaceController
1import WatchKit 2import Foundation 3import WatchConnectivity 4import UIKit 5 6 7class InterfaceController: WKInterfaceController, WCSessionDelegate { 8 9 func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) { 10 11 } 12 //ラベル アウトレット 13 @IBOutlet weak var watchTime1: WKInterfaceLabel! 14 15 //session インスタンス 16 let session = WCSession.default 17 18 //データフォーマッター インスタンス 19 let formatter = DateFormatter() 20 21 //ボタンアクション 22 @IBAction func timeMemory() { 23 //現在時刻取得 24 let date = Date() 25 self.watchTime1.setText(formatter.string(from:date )) 26 27 //以下 アイフォンへテキストデータの送信 28 guard session != nil else{ 29 30 return 31 32 } 33 34 let message = ["sendTime1" : watchTime1 ] 35 36 session.sendMessage(message, replyHandler: {(responses) -> Void in 37 if let answer = responses["answer"] as? String{ 38 self.label.setText(answer) 39 } 40 41 },errorHandler: {(error) -> Void in 42 print(error) 43 }) 44 45 46 47 } 48 49 50 51 override func awake(withContext context: Any?) { 52 // Configure interface objects here. 53 54 //データフォーマッターの設定 55 formatter.dateFormat = DateFormatter.dateFormat(fromTemplate: "MdHms", options: 0, locale: Locale(identifier: "ja_JP")) 56 } 57 58 override func willActivate() { 59 // This method is called when watch view controller is about to be visible to user 60 //WCSession セットアップ 61 if (WCSession.isSupported()){ 62 let session = WCSession.default 63 session.delegate = self 64 session.activate() 65 } 66 } 67 68 override func didDeactivate() { 69 // This method is called when watch view controller is no longer visible 70 } 71 72} 73
コードは以上になります。
一応、エラー自体は出ていないのですが、AppleWatchのボタンを押しても現在時刻の取得はできるものの、そのデータがiPhoneの親アプリで共有されない状態です。
どこを修正すれば実現できるかがわかりません。
Watch Connectivityに関する資料やサイトがあまりなく、色々試してみたのですが解決できません。(SwiftUIでの記事はいくつか見つけれたのですが、自分はStoryboardで開発を行なっているため、参考にできませんでした。)
なお、参考にしていたサイトは以下のリンクになります。
https://www.storange.jp/2016/03/watch-connectivity.html
具体的な質問になっていないかもしれませんが、よければご教授いただきたいです。
また、根本的なコードが違えばご指摘して頂けると助かりますし、他に参考になる記事等があれば教えて頂けると嬉しいです
よろしくお願いします。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。