ios - Swift WatchConnectivity 应用程序上下文作为字典

标签 ios swift watchkit watchconnectivity

我正在开发我的第一个 Apple Watch 应用程序(我的 iOS 应用程序的扩展)。我在将数据从一个 WKInterfaceController 发送到另一个时遇到了一个小问题。

我的第一个 Controller (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])
        }
    } 

然后在我的第二个 Controller (QrInterfaceController.swift) 中,我在下面获取从第一个 Controller 发送的数据 -

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("")
    }

我被困住了(可能是个简单/愚蠢的问题)如何从第二个 Controller 的上下文中解析我的数据?

此外,didReceiveMessage 仅在我启动放置 sendMessage 代码的 ViewController 时第二次起作用。正常吗?

最佳答案

首先,您可能需要像这样重新声明 myData:

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

这样就简单多了。然后,在 awake 函数中,您将像这样继续:

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

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

关于ios - Swift WatchConnectivity 应用程序上下文作为字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45917403/

相关文章:

ios - 扩展和收缩 View 中相邻的 UI 对象

objective-c - 如何实现上个月/下个月按钮并显示当前月份的日期?

swift - Swiftui withAnimation(.linear) 中的持续时间参数

ios - 快速添加图标和文本以滑动单元格操作

ios - WatchKit - 如何使用 RowControllerAtIndex 以编程方式更改 UITableViewCell 的背景图像

ios - 适用于 iOS 和 WatchOS 应用程序的类(class)?

ios - 无法转换泛型协议(protocol)函数类型实现的返回表达式

ios - 在 Swift 中将 12 小时 UTC 日期转换为 24 小时本地时区格式

ios - 没有数组从父应用程序发送到 Watch 应用程序

ios - Swift ios导航栏在被滚动隐藏后不会出现