WatchKit - 如何在首次发布时获取数据?

时间:2015-10-03 22:43:46

标签: ios swift watchkit apple-watch

我创建了一个手表应用程序,我在第一次打开时向手表发送数据时遇到问题。

我第一次强调,因为一旦手表上的应用程序打开,手机就会负责更新应用程序上下文,因此手机始终会启动连接。这部分工作正常。但是,第一次打开手表应用程序时,我希望手表应用程序启动连接并向手机应用程序询问数据。我无法让它工作......

我一直试图让手表通过以下方式从手表发送消息来请求来自IOS App的数据:

        if (WCSession.defaultSession().reachable) {
            WCSession.defaultSession().sendMessage(infoDictionary,
                replyHandler: { userInfo in
                    self.combinedDict = userInfo
                    self.defaults.setObject(self.combinedDict, forKey: "combinedict")
                    self.defaults.synchronize()
                    self.LoadTheView()
                },
                errorHandler: { (error:NSError) -> Void in
                    print("WatchKit communication error: \(error.localizedDescription)")
            })

收到消息后,ios应用程序应该用字典回复,我实现了这个,我把它放在AppDelegate中:

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

        if #available(iOS 9.0, *) {

            if (WCSession.isSupported()) {
                watchSession = WCSession.defaultSession()
                watchSession!.delegate = self
                watchSession!.activateSession()

            }

        } else {
            // Fallback on earlier versions
        }

        return true

}
      @available(iOS 9.0, *)
        func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {

            print("Did receive message on ios app") // this is never fired

            replyHandler(WatchConnection().SendToWatch()) //WatchConnection().SendToWatch() returns a value of type [String : AnyObject]

        }

然而它不起作用,应用程序确实发送消息但从未得到回复...我怎样才能让它工作?手表是否有另一种方式可以在首次发布时请求数据?

1 个答案:

答案 0 :(得分:0)

WCSession是一个进程范围的单例,只能有一个委托。确保将其设置在一个位置以避免混淆或错误!

如果您的应用程序中有很多不同的部分需要关注设置的手表连接,那么单独包装WCSession是一个不错的模式。