将transferUserInfo转换为sendMessage

时间:2016-02-26 03:42:05

标签: ios swift watchkit apple-watch watch-os-2

我目前使用transferUserInfo 将我的数据从iPhone传递到Watch。

我想添加一个额外的功能,可以通过Watch 向iPhone询问相同的数据(因为它可能是第一次打开Watch)。

所以我需要sendMessage:replyHandler:errorHandler:,但我无法弄清楚如何使用它。

我对transferUserInfo所拥有的内容:

iPhone TableViewController.swift

let applicationDict = ["TC" : newP.tC, "Mat" : newP.mat]
let transfer = WCSession.defaultSession().transferUserInfo(applicationDict)

观看InterfaceController.swift

func session(session: WCSession, didReceiveUserInfo userInfo: [String : AnyObject]) {

    if let tC = userInfo["TC"] as? String, let mat = userInfo["Mat"] as? String {

        receivedData.append(["TC" : tC , "Mat" : mat])
        ExtensionDelegate.evnts.append(Evnt(dataDictionary: ["TC" : tC , "Mat" : mat]))
        doTable()

    } else {
        print("tC and mat are not same as dictionary value")
    }

}

我尝试添加sendMessage

iPhone TableViewController.swift

                let msg = WCSession.defaultSession().sendMessage(applicationDict, replyHandler: nil, errorHandler: nil)

观看InterfaceController.swift

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
    //handle received message
    let value1 = message["TC"] as? String
    let value2 = message["Mat"] as? String

    //use this to present immediately on the screen
    dispatch_async(dispatch_get_main_queue()) {
        //self.messageLabel.setText(value)
        print("ValWatch1: \(value1)")
        print("ValWatch2: \(value2)")

    }
    //send a reply
    replyHandler(["TC":"Yes"])

}

我不知道我搞砸了什么。

1 个答案:

答案 0 :(得分:1)

您尝试向手表发送消息的代码是正确的

let msg = WCSession.defaultSession().sendMessage(applicationDict, replyHandler: nil, errorHandler: nil)

但你确定手表是配对的吗?在发送消息之前,您可能需要先添加此检查

if (WCSession.defaultSession().reachable) {
 // send message 
}

当您尝试从父应用发送消息时,请确保您的观看应用正在运行。如果您的手表应用程序不在前台,那么它将无法接收从您的iPhone应用程序发送的消息。