WatchKit - 如何在首次启动时获取数据?

WatchKit - How to get data on first launch?

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

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

我一直在尝试让手表从 IOS 应用程序请求数据,方法是使用以下命令从手表发送消息:

        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]

        }

但是它不起作用,该应用程序确实发送了消息但从未收到回复...我怎样才能让它起作用?手表是否有其他方式在首次启动时请求数据?

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

如果您的应用程序的许多不同部分都关心正在设置的手表连接性,则单例包装 WCSession 是一种不错的模式。