我创建了一个手表应用程序,我在第一次打开时向手表发送数据时遇到问题。
我第一次强调,因为一旦手表上的应用程序打开,手机就会负责更新应用程序上下文,因此手机始终会启动连接。这部分工作正常。但是,第一次打开手表应用程序时,我希望手表应用程序启动连接并向手机应用程序询问数据。我无法让它工作......
我一直试图让手表通过以下方式从手表发送消息来请求来自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]
}
然而它不起作用,应用程序确实发送消息但从未得到回复...我怎样才能让它工作?手表是否有另一种方式可以在首次发布时请求数据?
答案 0 :(得分:0)
WCSession是一个进程范围的单例,只能有一个委托。确保将其设置在一个位置以避免混淆或错误!
如果您的应用程序中有很多不同的部分需要关注设置的手表连接,那么单独包装WCSession是一个不错的模式。