![](/img/trans.png)
[英]WCSession Delegate | Is it necessary to call reply handler synchronously?
[英](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.