我正在开发我的第一个 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/