观看连接会话问题

时间:2016-04-30 19:04:55

标签: ios swift apple-watch watchconnectivity apple-watch-complication

我正在尝试从手表扩展程序向手机发送消息以更新并发症。

AppDelegate.swift

var session = WCSession.defaultSession()

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        if WCSession.isSupported(){
            session.delegate = self
            session.activateSession()
        }
        return true
}

func session(session: WCSession, didReceiveMessage message: [String : AnyObject], replyHandler: ([String : AnyObject]) -> Void) {
        replyHandler(["scheduleNames":scheduleNames, "scheduleData":scheduleData])
    }

ExtensionDelegate.swift

override init(){
    super.init()
    if WCSession.isSupported(){
        session = WCSession.defaultSession()
        session.delegate = self
        session.activateSession()
    }
    self.sendMessage()
}

func sendMessage(){
        print("Attempting to send message")
        session.sendMessage(["Sender": "Complication"], replyHandler: {
            reply in
            print(reply.description)
            }, errorHandler: {
                error in
                print(error.description)
        })

    }

但是当我运行手表模拟器(并且手机应用程序未打开)时,我会收到

  

错误域= WCErrorDomain代码= 7007“配对设备上的WatchConnectivity会话无法访问。”

这也出现在手机和手表上。

导致这种情况的原因是什么?

UPDATE
只有当我从分机拨打电话时才会发生这种情况。手表应用程序可以发送和接收消息。此外,它在从applicationDidFinishLaunching()调用时有效,但在扩展委托中没有任何其他内容。

UPDATE
我修复了前一个,现在得到了

  

WatchConnectivity会话没有委托。

1 个答案:

答案 0 :(得分:2)

感谢this answer,我发现了问题。在requestedUpdateDidBegin()中从Complication(我正在做的事情)调用在异步方法中执行异步方法,导致update函数在sendMessage函数返回之前结束。