我正在尝试从手表扩展程序向手机发送消息以更新并发症。
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会话没有委托。
答案 0 :(得分:2)
感谢this answer,我发现了问题。在requestedUpdateDidBegin()中从Complication(我正在做的事情)调用在异步方法中执行异步方法,导致update函数在sendMessage函数返回之前结束。