首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >WCSession尚未开通

WCSession尚未开通
EN

Stack Overflow用户
提问于 2016-11-21 02:48:39
回答 2查看 9.2K关注 0票数 17

当我尝试发送一些东西时,我收到WCSession未被激活错误。我不知道我做错了什么。我已经测试了几个“必须”工作的预制解决方案。但它在我的模拟器和物理设备上不起作用。

下面是一些代码:

我的应用代理:

代码语言:javascript
复制
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
    }

........


}

我的interfaceController:

代码语言:javascript
复制
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()
    }
}

extensionDelegate:

代码语言:javascript
复制
   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]) {

            }
    ....

是否有错误的代码或实现?因为对我来说什么都不是。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-15 09:06:50

我发现了我遇到的问题,我想你的问题也是一样的。我试图在调用activate()之后立即发送消息,这在过去是有效的,但由于引入了session(activationDidCompleteWith:)函数,我需要从那里发送消息。

所以我认为你的解决方案是其中之一:

将您的InterfaceController设置为WCSessionDelegate,将所有WCSession激活调用移至此处,然后将来自session(activationDidCompleteWith:)的消息发送到ExtensionDelegate中(在我的应用程序中,我处理session(activationDidCompleteWith:)中的所有通信ExtensionDelegate中的来自session(activationDidCompleteWith:)的通知,并在ExtensionDelegate中添加一个观察者来处理它

除此之外,我认为您可能还有一个问题,因为您的AppDelegate中的session(didReceiveMessage:)声明是错误的(或者至少我在尝试您的代码时遇到了一个问题)。

新的声明是:

代码语言:javascript
复制
func session(_ session: WCSession, didReceiveMessage message: [String : Any], replyHandler: @escaping ([String : Any]) -> Void)
票数 30
EN

Stack Overflow用户

发布于 2019-10-29 04:50:34

另一件要检查的事情是,如果您的代码看起来很好,并且WCsession仍然无法激活,请重新启动您的手表。这就是我的答案。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40707988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档