Swift 只能将WCSession消息从手表发送到iphone,不能以其他方式发送
这是我第一次尝试任何手表功能,但遇到了一个问题:我只能从手表向iPhone发送消息,但无法从iPhone向手表发送消息。当会话是可访问的,但在interfaceController中从未触发didReceiveMessage日志时,我使用.sendMessage方法 我只想在手表上有一个按钮,请求viewController中某个数组的最新计数。我也尝试过sendUserInfo,得到了同样的结果,单向通信。任何帮助都将不胜感激 xcode 8.1 swift 2.3和3(手表) 视图控制器Swift 只能将WCSession消息从手表发送到iphone,不能以其他方式发送,swift,apple-watch,watchconnectivity,Swift,Apple Watch,Watchconnectivity,这是我第一次尝试任何手表功能,但遇到了一个问题:我只能从手表向iPhone发送消息,但无法从iPhone向手表发送消息。当会话是可访问的,但在interfaceController中从未触发didReceiveMessage日志时,我使用.sendMessage方法 我只想在手表上有一个按钮,请求viewController中某个数组的最新计数。我也尝试过sendUserInfo,得到了同样的结果,单向通信。任何帮助都将不胜感激 xcode 8.1 swift 2.3和3(手表) 视图控制器 @
@IBAction func refreshButton() {
if(WCSession.isSupported()){
WCSession.default().sendMessage(["getCount":"please"], replyHandler: nil, errorHandler: nil)
}
}
@IBOutlet var registrationCount: WKInterfaceLabel!
override func awake(withContext context: Any?) {
super.awake(withContext: context)
}
override func willActivate() {
super.willActivate()
if WCSession.isSupported() {
WCSession.default().delegate = self
WCSession.default().activate()
}
}
override func didDeactivate() {
super.didDeactivate()
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
print("Cool phone sent me a message")
}
@available(iOS 9.3, *)
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?){
print("Session Active: \(activationState), Error: \(error)")
}
func sessionDidBecomeInactive(session: WCSession){
print("Watch session inactive")
}
func sessionDidDeactivate(session: WCSession){
print("Watch session deactivated")
}
在viewDidLoad中
if WCSession.isSupported() {
WCSession.defaultSession().delegate = self
WCSession.defaultSession().activateSession()
}
用于wcsessionelegate和message
func session(session: WCSession, activationDidCompleteWithState activationState: WCSessionActivationState, error: NSError?){
print("Session Active: \(activationState), Error: \(error)")
}
func session(session: WCSession, didReceiveMessage message: [String : AnyObject]) {
if (message["getCount"] as? String == "please"){
print("The watch asked nicely") // this logs on watch button press
if (WCSession.defaultSession().reachable) {
print("isReachable") // this logs on watch button press
WCSession.defaultSession().sendMessage(["yo":"count"], replyHandler: nil, errorHandler: nil)
}
}
}
func sessionDidBecomeInactive(session: WCSession){
print("Phone session inactive")
}
func sessionDidDeactivate(session: WCSession){
print("Phone session deactivated")
}
接口控制器
@IBAction func refreshButton() {
if(WCSession.isSupported()){
WCSession.default().sendMessage(["getCount":"please"], replyHandler: nil, errorHandler: nil)
}
}
@IBOutlet var registrationCount: WKInterfaceLabel!
override func awake(withContext context: Any?) {
super.awake(withContext: context)
}
override func willActivate() {
super.willActivate()
if WCSession.isSupported() {
WCSession.default().delegate = self
WCSession.default().activate()
}
}
override func didDeactivate() {
super.didDeactivate()
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
print("Cool phone sent me a message")
}
@available(iOS 9.3, *)
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?){
print("Session Active: \(activationState), Error: \(error)")
}
func sessionDidBecomeInactive(session: WCSession){
print("Watch session inactive")
}
func sessionDidDeactivate(session: WCSession){
print("Watch session deactivated")
}
Welp,看起来打印只在iPhone端起作用,而不是在手表端……请注意,只有当手表应用程序是前台时,从iPhone发送到手表的消息才会被发送(IsRecable将为true),但即使iOS应用程序是后台,从手表发送到iPhone的消息也会成功。考虑使用UpDeaApdioPrimeCurror(“:”)In StrutWelp,看起来仅在iPhone侧工作,而不是监视侧……注意只有当手表应用程序处于前台时,从iPhone观看的消息才会被传递(ISAccess将是真的),但是即使在iOS应用程序是后台的情况下,从手表发送消息到iPhone也会成功。考虑使用UpDeaAppultFieldIn(“:”)代替