我正在尝试使用一个简单的应用程序学习watchkit连接,并花了两天徒劳地研究这个错误:
_WatchKit_Extension.InterfaceController没有实现委托方法 .
我已经盲目地复制了"SimpleWatchConnectivity" https://developer.apple.com/library/content/samplecode/SimpleWatchConnectivity/Listings/SimpleWatchConnectivity_WatchKit_Extension_InterfaceController_swift.html演示代码中的代码 . 并且在没有成功的情况下搜索了论坛 .
我的代码构建并运行正常,但我在 Watch 上收到以下错误
2018-01-06 10:39:20.522995 1100 messageDemo WatchKit Extension [338:743006] [WC] - [WCSession onqueue_handleDictionaryMessageRequest:withPairingID:] _ block_invoke委托messageDemo_WatchKit_Extension.InterfaceController不实现委托方法2018-01-06 10:39: 20.524378 1100 messageDemo WatchKit扩展[338:743006] [WC] - [WCSession _onqueue_sendResponseError:identifier:dictionaryMessage:]标识符:A150D814-453C-44B7-B970-913697526D6A,带有WCErrorCodeDeliveryFailed
当我执行时:
if (WCSession.isSupported())
{
WCSession.default.delegate = self;
WCSession.default.activate()
if let messageText = textField.text{
WCSession.default.sendMessage(["message": messageText]
,replyHandler: {replyMessage in
print(replyMessage)
}
, errorHandler: {error in
print( error.localizedDescription)} )
}
}
来自iOS ViewController .
我的界面控制器如下:
import WatchKit
进口基金会
导入WatchConnectivity
class InterfaceController:WKInterfaceController
,WCSessionDelegate
{
func session(_ session:WCSession
,activationDidCompleteWith activationState:WCSessionActivationState
,错误:错误?){
打印("activationDidCompleteWith:(activationState )")/
}
func sessionReachabilityDidChange(_ session:WCSession){
/
/
打印("sessionReachabilityDidChange")
}
@IBOutlet var messageLabel: WKInterfaceLabel!
override func awake(withContext context: Any?) {
super.awake(withContext: context)
/
}
override func willActivate() {
/
super.willActivate()
if (WCSession.isSupported())
{
WCSession.default.delegate = self;
WCSession.default.activate()
}
}
override func didDeactivate() {
super.didDeactivate()
}
private func session(session: WCSession, didReceiveMessage message: [String : Any]
, replyHandler: @escaping ([String : Any]) -> Void) {
self.messageLabel.setText(message["message"]! as? String)
}
func session(_ session: WCSession, didReceiveMessage message: [String : Any]) {
self.messageLabel.setText(message["message"]! as? String)
}
func session(_ session: WCSession, didReceiveMessageData messageData: Data) {
print("HERE01")
}
func session(_ session: WCSession, didReceiveMessageData messageData: Data, replyHandler: @escaping (Data) -> Void) {
self.session(session, didReceiveMessageData: messageData)
print("HERE02")
}
func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
print("HERE03")
}
func session(_ session: WCSession, didReceiveUserInfo userInfo: [String : Any] = [:]) {
print("HERE04")
}
func session(_ session: WCSession, didFinish userInfoTransfer: WCSessionUserInfoTransfer, error: Error?) {
print("HERE05")
}
func session(_ session: WCSession, didReceive file: WCSessionFile) {
print("HERE06")
}
func session(_ session: WCSession, didFinish fileTransfer: WCSessionFileTransfer, error: Error?) {
print("HERE07")
}
}
(抱歉格式化,我尝试了10分钟才能把它弄好,但遗憾地失败了)
我添加了一堆打印件以确保涵盖所有案例 .
完整的错误是:
2018-01-06 10:39:20.522995 1100 messageDemo WatchKit Extension [338:743006] [WC] - [WCSession onqueue_handleDictionaryMessageRequest:withPairingID:] _ block_invoke委托messageDemo_WatchKit_Extension.InterfaceController不实现委托方法2018-01-06 10:39: 20.524378 1100 messageDemo WatchKit扩展[338:743006] [WC] - [WCSession _onqueue_sendResponseError:identifier:dictionaryMessage:]标识符:A150D814-453C-44B7-B970-913697526D6A,带有WCErrorCodeDeliveryFailed
任何帮助将不胜感激
[编辑]当我使用调试器监视电话应用程序时,我看到发送消息失败:
2018-01-07 09:47:23.319221 1100 messageDemo [6628:1549809] [WC] - [WCSession _onqueue_notifyOfMessageError:messageID:withErrorHandler:](null)errorHandler:YES with WCErrorCodeSessionNotActivated 2018-01-07 09:47:23.321103 1100 messageDemo [6628:1549978] [WC] - [WCSession _onqueue_notifyOfMessageError:messageID:withErrorHandler:] _ block_invoke drop for pairingIDs不再匹配 . pairingID(null),client pairingID :( null)尚未激活WatchConnectivity会话 .
当我尝试发送 second message 时,会生成从帖子顶部引用的watchKitExtension收到的错误 . first message 中watchKitExtension没有错误 .
2 回答
以下解决方案适用于通过
WCSession
在iPhone和iWatch之间共享数据,ViewController.swift
InterfaceController.swift (观看延期)
OutPut will be as below,
我的问题是sendMessage实现了replyHandler:{replyMessage in
打印(replyMessage)
我收到邮件时没有回复 . 我从来没有真正弄清楚如何发送回复,最后放弃了sendMessage,转而使用更准确地满足我要求的updateApplicationContext .