簡體   English   中英

(Watch Connectivity) WCSession 缺少它的委托(僅在 XCode11.0 中)

[英](Watch Connectivity) WCSession is missing its delegate (only in XCode11.0)

作為標題,我只在 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 引起的,但我找不到是什么原因造成的。

謝謝。

我修復了這些錯誤。
事實上,我實現了以下內容:

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,即使它已經被激活。
所以,我設置了 session 用於接收應用程序上下文,但事件沒有發生並被調用,就好像“委托(null)沒有實現會話”一樣。

我面臨着和你一樣的問題,我不知道如何解決這個問題。

這是我的代碼在手機上的樣子:(我的用例是手機是從手表接收數據的那個):

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) {
        
    }
  

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM