(Watch Connectivity) WCSession отсутствует свой делегат (только в XCode11.0) - PullRequest
0 голосов
/ 30 сентября 2019

В качестве заголовка я обнаружил эту ошибку только в XCode11.0.
Я отправляю некоторые данные из приложения (написанные с использованием метода native-native) в appleWatch.
Сейчас я использую средство наблюдения и метод«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]) {
    //
  }

И я обнаружил, что ошибка (1) не произошла в XCode10.3.
... также произошла ошибка (2).
Есть ли у вас какие-либо идеи относительно этой ошибки (1) или(2)?
Я полагаю, это вызвано XCode11.0, но я не смог определить причину этого.

Спасибо.

1 Ответ

0 голосов
/ 30 сентября 2019

Я исправил эти ошибки.
Фактически, я реализовал следующее:

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, даже если он уже активирован.
Итак, я установил сессию, которая предназначена для receiveApplicationContext, но событие не произошло, и вызывается так, как будто 'Delegate (NULL) не реализует сессию'.

...