ApplicationContext属性始终返回空字典

时间:2015-11-06 11:36:27

标签: watchkit watchconnectivity

我试图从WCSession获取最新数据,即使我刚刚收到didReceiveApplicationContext来电,我也无法理解为什么。 更多详细信息可直接在代码中找到:

//Watch Code

override func awakeWithContext(context: AnyObject?) {
    super.awakeWithContext(context)
    if (WCSession.isSupported()) {
        session = WCSession.defaultSession()
        session?.delegate = self
        session?.activateSession()
        verifyUser()
    }
}

// 1. This function is called, with the applicationContext data 
func session(session: WCSession, didReceiveApplicationContext applicationContext: [String : AnyObject]) {
    print("CONTEXT \(applicationContext)")
}

// 2. I manually trigger this call from the watch with a button.
// even if I call this function after the previous function (1) it always print an Empty ([:]) applicationContext. 
@IBAction func printContext(){
    print(session?.applicationContext)
}

我希望始终使用applicationContext使用最新信息集更新updateApplicationContext属性,因为我总是使用WCSession获得的WCSession.defaultSession用于iOS和观看应用程序。有什么我误解连接的吗?!

2 个答案:

答案 0 :(得分:9)

receivedApplicationContext正是您要找的。 applicationContext的内容是您发送但未收到的内容。

答案 1 :(得分:1)

至少在WatchOS 6上,receivedApplicationContext为空,直到激活了会话为止,这意味着如果要启动该应用程序,则需要等到func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?)被调用之后再验证状态在获取最新上下文之前处于活动状态。

希望这能帮助一个在这里着陆并且遇到与我一样的问题的人?