【问题标题】:Swift WatchConnectivity app context as DictionarySwift WatchConnectivity 应用程序上下文作为字典
【发布时间】:2017-08-28 10:59:27
【问题描述】:

我正在开发我的第一个 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 仅在我启动放置 sendMessage 代码的 ViewController 时第二次起作用。正常吗?

【问题讨论】:

    标签: ios swift watchkit watchconnectivity


    【解决方案1】:

    首先,您可能想重新声明myData

    var myData: [String: Any] = ...
    

    这使它更简单一些。然后,在awake 函数中,你可以这样继续:

    if let myData = context as? [String: Any] {
        if let myQrImage = myData["myQrValue"] as? Date {
            ...
    

    这是否为您指明了正确的方向?

    【讨论】:

    • 你可能不相信,我也试过了。您的回答向我证实了我做对了!谢谢。
    • 知道为什么 didReceiveMessage 只能从第二次开始工作吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-23
    • 1970-01-01
    • 2016-08-27
    • 2015-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多