我正在开发一个iOS应用程序,它必须使用WCSession向Apple Watch应用程序发送更新 . 它在iOS / Watch模拟器中起着瑕疵的作用,但在真实设备中却没有 .
当我尝试使用 sendMessage:replyHandler:errorHandler:
方法发送消息时,如果Apple Watch应用程序在后台,我会收到以下错误:
[WCSession _onqueue_notifyOfMessageError:messageID:withErrorHandler:] B322D88E-8F50-4BAB-86FF-AFD3B851E1CC errorHandler:NO with WCErrorCodeMessageReplyFailed - > WCErrorCodeNotReachable
但在我的代码中我添加了各种检查:
if (_session &&
_session.isPaired &&
_session.isWatchAppInstalled &&
_session.isReachable &&
_session.activationState == WCSessionActivationStateActivated)
{
[_session sendMessage:dictionary
replyHandler:nil
errorHandler:^(NSError * _Nonnull error) {
NSLog(@"%@",error);
}
];
}
else
{
[_session transferUserInfo:dictionary];
}
我有什么理由在发送消息时收到"Not Reachable"错误消息,但是 session.isReachable
会返回 true
吗?
我've also handled the case where the session is not reachable, and I' m在那里用 transferUserInfo:
排队消息,但由于会话被检测为Reachable,因此消息立即发送,因此丢失了 .
1 回答
您是否还编写了sendMessage选择器的错误处理程序参数?在那里,您还可以检查WCSession在尝试发送消息时引发的错误类型,如果您还可以根据应用程序逻辑重新发送消息数据作为ApplicationContext / UserInfo / FileTransfer . 当我收到这些错误代码时,我通常会再次以userInfo发送消息数据:WCErrorCodeNotReachable,WCErrorCodeDeliveryFailed,WCErrorCodePayloadTooLarge,WCErrorCodeTransferTimedOut
虽然在你的情况下sendMessage选择器可能是这样的: