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 是一种不错的模式。
我创建了一个手表应用程序,但在第一次打开时向手表发送数据时遇到问题。
我第一次强调是因为一旦打开手表上的应用程序,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 是一种不错的模式。