Контекст приложения Swift WatchConnectivity в виде словаря
Я работаю над своим первым приложением Apple Watch (расширение моего приложения для iOS). Я сталкиваюсь с небольшой проблемой при отправке данных из одного WKInterfaceController в другой.
Мой первый контроллер (InterfaceController.swift) имеет didReceiveMessage
где он получает данные из моего приложения iOS.
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
let myQrValue = message["qrCode"] as! String
let myQrImage = message["qrCodeImageData"] as! Data
var myData: [AnyHashable: Any] = ["myQrValue": myQrValue, "myQrImage": myQrImage]
if myQrValue.isEmpty == false {
WKInterfaceController.reloadRootControllers(withNames: ["QrScreen"], contexts: [myData])
}
}
Затем в моем втором контроллере (QrInterfaceController.swift) у меня ниже, чтобы получить данные, отправленные с первого контроллера -
override func awake(withContext context: Any?) {
super.awake(withContext: context)
print("context \(context)")
if let myData = context {
print("myData \(myData)")
// userQrNumber.setText(myData)
}
if let myQrImage = myQrImage {
userQrImage.setImageData(myQrImage)
}
if let myQrLabel = myQrLabel {
userQrNumber.setText(myQrLabel)
}
self.setTitle("")
}
Я застрял (может быть простой / глупый вопрос) о том, как разобрать мои данные из контекста во втором контроллере?
Кроме того, didReceiveMessage работает только второй раз, когда я запускаю свой ViewController, где размещен код sendMessage. Это нормально?
1 ответ
Во-первых, вы можете захотеть переопределить myData
как это:
var myData: [String: Any] = ...
что делает это немного проще. Затем в awake
функция, вы бы пойти дальше, как это:
if let myData = context as? [String: Any] {
if let myQrImage = myData["myQrValue"] as? Date {
...
Это показывает вам правильное направление?