Контекст приложения 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 {
        ...

Это показывает вам правильное направление?

Другие вопросы по тегам