2017-08-28 29 views
1

我正在开发我的第一个Apple Watch应用程序(对我的iOS应用程序的扩展)。我在将数据从一个WKInterfaceController发送到另一个时遇到了一个小问题。Swift WatchConnectivity应用程序上下文作为字典

我的第一个控制器(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代码。这是正常的吗?

回答

2

首先,你可能要重新声明myData就象这样:

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

这使得它有点简单。然后,在awake功能,你会继续这样的:

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

请问你在正确的方向这个节目?

+0

你可能不相信,我只是试了一样。你的回答向我证实我做得对!谢谢。 –

+0

为什么didReceiveMessage只能从第二次工作的任何想法? –