2017-08-28 47 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只能從第二次工作的任何想法? –