以下のサイトを参考にしてWatchConnectivityでwatchOSのアプリへ文字列の送信をすることが出来ました。
https://dev.classmethod.jp/smartphone/iphone/watchos3-bg-refresh-3/#complete
そのコードを以下に示します。(主に送受信の部分だけ)
Swift
1//iOS app側のVC 2WCSession.default.transferUserInfo(["titles_watch": List_watch]) //List_watchは文字列の配列
Swift
1//watchOS app側のIC 2 3func session(_ session: WCSession, 4 didReceiveUserInfo userInfo: [String : Any] = [:]) { 5 // データを取り出す 6 guard let titles_watch = userInfo["titles_watch"] as? [String] else { return } 7 8 // watchOS アプリにデータを反映する処理 9 DispatchQueue.main.async(execute: { () in 10 self.w_titles = titles_watch 11 }) 12 } 13
以上と同じ様に追加でUIcolorの配列も送受信したいです。
以下の様に行いました。
Swift
1//iOS app側のVC 2WCSession.default.transferUserInfo(["titles_watch": List_watch]) //List_watchは文字列の配列 3WCSession.default.transferUserInfo(["Colors_watch": Colors]) //ColorsはData型にエンコードしてあります
Swift
1//watchOS app側のIC 2 3func session(_ session: WCSession, 4 didReceiveUserInfo userInfo: [String : Any] = [:]) { 5 // データを取り出す 6 guard let titles_watch = userInfo["titles_watch"] as? [String] else { return } 7 guard let Colors_watch = userInfo["Colors_watch"] as? [UIColor] else { return }//userInfo["Colors_watch"]がnilでreturnしてしまう 8 9 // watchOS アプリにデータを反映する処理 10 DispatchQueue.main.async(execute: { () in 11 self.w_titles = titles_watch 12 }) 13 } 14
しかし以上のコメントに書いた様に受信した際にnilとなってしまいます。送信時には少なくともColorsに中身が入っている事は確認できるのですが、受信時にはなぜnilになってしまうのでしょうか?
-----追記ーーーーー
送信側で以下のように[UIColor]にデコードしてから送りました。
Swift
1//iOS app側のVC 2WCSession.default.transferUserInfo(["titles_watch": List_watch]) //List_watchは文字列の配列 3if let Colors_w = NSKeyedUnarchiver.unarchiveObject(with: Colors) as? [UIColor] { 4 5 WCSession.default.transferUserInfo(["Colors_watch": Colors_w]) //ここは実行されているので送信じはnilではないはずなのですが。。。 6 7 }
以上のようにして、やはり送信じはnilではない事を確認していますが、受診時に、userInfo["Colors_watch"]がnilでreturnしてしまいます。。。
(deleted)
回答1件
あなたの回答
tips
プレビュー