Swift 只能将WCSession消息从手表发送到iphone,不能以其他方式发送

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(手表) 视图控制器 @

这是我第一次尝试任何手表功能,但遇到了一个问题:我只能从手表向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(“:”)代替