我正在开发我的第一个Apple Watch应用程序(我的iOS应用程序的扩展)。我在将数据从一个WKInterfaceController发送到另一个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("")
}
我被困(可能是简单/愚蠢的问题)如何从第二个控制器中的上下文解析我的数据?
此外,当我启动放置sendMessage代码的ViewController时,didReceiveMessage仅第二次工作。这是正常的吗?
答案 0 :(得分:2)
首先,您可能希望重新声明myData
:
var myData: [String: Any] = ...
这使它更简单。然后,在awake
函数中,你将继续这样:
if let myData = context as? [String: Any] {
if let myQrImage = myData["myQrValue"] as? Date {
...
这是否显示了正确的方向?