Swift WCSession尚未激活
当我尝试发送某些内容时,我发现WCSession尚未激活错误。我不知道我做错了什么。我已经测试了“必须”工作的几种预先制作的解决方案。但它在我的模拟器和物理设备上不起作用 一些代码: 我的应用程序代理:Swift WCSession尚未激活,swift,Swift,当我尝试发送某些内容时,我发现WCSession尚未激活错误。我不知道我做错了什么。我已经测试了“必须”工作的几种预先制作的解决方案。但它在我的模拟器和物理设备上不起作用 一些代码: 我的应用程序代理: import UIKit import CoreData import WatchConnectivity @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate
import UIKit
import CoreData
import WatchConnectivity
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, WCSessionDelegate {
var window: UIWindow?
func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : String]) -> Void) {
replyHandler(["message": "Hello Watch!"])
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func sessionDidBecomeInactive(_ session: WCSession) {
}
func sessionDidDeactivate(_ session: WCSession) {
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
return true
}
........
}
我的界面控制器:
import WatchKit
import Foundation
import WatchConnectivity
class InterfaceController: WKInterfaceController {
override func awake(withContext context: Any?) {
super.awake(withContext: context)
// Configure interface objects here.
}
override func willActivate() {
// This method is called when watch view controller is about to be visible to user
super.willActivate()
if WCSession.default().isReachable {
let messageDict = ["message": "hello iPhone!"]
WCSession.default().sendMessage(messageDict, replyHandler: { (replyDict) -> Void in
//print(replyDict)
}, errorHandler: { (error) -> Void in
// print(error)
})
}
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
}
override func didDeactivate() {
// This method is called when watch view controller is no longer visible
super.didDeactivate()
}
}
ExtensionLegate:
import WatchKit
import WatchConnectivity
class ExtensionDelegate: NSObject, WKExtensionDelegate, WCSessionDelegate {
func applicationDidFinishLaunching() {
// Perform any final initialization of your application.
if WCSession.isSupported() {
let session = WCSession.default()
session.delegate = self
session.activate()
}
}
func session(_ session: WCSession, activationDidCompleteWith activationState: WCSessionActivationState, error: Error?) {
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
}
....
是否有错误的代码或实现?因为对我来说什么都不管用。我发现了我的问题,我认为你的问题与之类似。我试图在调用
activate()
后立即发送消息,这在过去很有效,但自从引入会话(activationIDCompleteWith:)
函数后,我需要从那里发送消息
因此,我认为您的解决方案是:
wcsessionelegate
,全部移动
WCSession
激活呼叫,并从
会话(ActivationIDCompleteWith:)
会话(activationIDCompleteWith:)
中的
应用程序I处理扩展Legate中的所有通信会话(ActivationIDCompleteWith:)
的通知
extensionelegate
并添加一个观察者来处理它
InterfaceController
会话(didReceiveMessage:)
的声明是错误的(或者至少我在尝试您的代码时遇到了问题)
新的宣言是:
func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)
还有一件事要检查您的代码是否正常,WCsession是否仍然无法激活,请重新启动手表。这就是我的答案