2

作为标题,我只在 XCode11.0 中发现了这个错误。
我将一些数据从应用程序(用 react-native 编写)发送到 appleWatch。
我现在正在使用 watch-connectivity 和“updateApplicationContext”方法与 iPhone 进行通信。
但是 appleWatch 返回了以下错误。

错误日志如下:

(1) [WC] WCSession is missing its delegate
(2) [WC] -[WCSession handleApplicationContextWithPairingID:]
_block_invoke delegate (null) does not implement session:didReceiveApplicationContext:

源代码如下:

let session = WCSession.default
  override func awake(withContext context: Any?) {
    super.awake(withContext: context)
    session.delegate = self
    session.activate()
  }

func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
    //
  }

而且我发现XCode10.3中没有发生错误(1)。
...错误(2)也发生了。
您对此错误(1)或(2)有任何想法吗?
我猜这是由 XCode11.0 引起的,但我找不到是什么原因造成的。

谢谢。

4

2 回答 2

1

我修复了这些错误。
事实上,我实现了以下内容:

override func awake(withContext context: Any?) {
    super.awake(withContext: context)
    if WCSession.isSupported() {
      let session = WCSession.default
      session.delegate = self
      session.activate()
      if session.isReachable {
        print("your iphone is Reachable")
      } else {
        print("your iphone is not Reachable...")
      }
    } else {
      print("This device is not supported.")
    }

    let aList = dataAccess.fetchData(id: nil)
    let aControllers = [String](repeating: "aController", count: aList.count)
    MainInterfaceController.reloadRootControllers(withNames: aControllers, contexts: aList)
  }

我发现最后一行导致了这个错误。
我猜'reloadRootControllers'的方法会重置WCsession,即使它已经被激活。
因此,我设置了用于接收应用程序上下文的会话,但事件没有发生并被调用,就好像“委托(null)没有实现会话”一样。

于 2019-09-30T12:43:19.183 回答
0

我面临着和你一样的问题,我不知道如何解决这个问题。

这是我的代码在手机上的样子:(我的用例是手机是从手表接收数据的那个):

import WatchConnectivity

class PhoneWorkingSet: NSObject,  WCSessionDelegate {

    override init() {
        super.init()
       }
    
    func startSession() {
       if WCSession.isSupported() {
        let session = WCSession.default
        session.delegate = self
        session.activate()
        }
    }
    

    func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
    
        print("Received: \(applicationContext)")
    }
    
    
    
    func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
        if(!session.isReachable) {
            print("Watch not reachable")
        } else {
            print("Watch Reachable")
        }
    }
    
    func sessionDidBecomeInactive(_ session: WCSession) {
        print("has contentPending: \(session.hasContentPending)")
    }
    
    func sessionDidDeactivate(_ session: WCSession) {
        
    }
  

}
于 2021-03-03T11:03:27.553 回答