从Apple Watch向设备发送消息时出现以下错误
Error Domain=WCErrorDomain Code=7012 "Message reply too long."UserInfo={NSLocalizedDescription=消息回复时间过长。nslocalizedfailurerreason =应答超时。}
#import <WatchConnectivity/WatchConnectivity.h>
在手表和主应用程序目标中,并符合手表和设备上的委托方法
从手表发送消息到设备
- 会话确认为可用
-
会话确认可达
NSDictionary *applicationDict = [[NSDictionary alloc] initWithObjects:@[@"SomethingHere"] forKeys:@[@"valueKey"]]; if([[WCSession defaultSession] isReachable]) { NSLog(@"Reachable"); //<---- Console shows reachable [[WCSession defaultSession] sendMessage:applicationDict replyHandler:^(NSDictionary *reply) { NSLog(@"%@",reply); } errorHandler:^(NSError *error) { NSLog(@"%@",error); //<--- returns error }]; }
In appdelegate didFinishLaunching
// Watch kit session
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
NSLog(@"nn - WatchKit Session Started - nn");
}
else{
NSLog(@"WatchKit Session Error");
}
会话确认正常启动
设备接收消息
- (void)session:(nonnull WCSession *)session didReceiveMessage:(nonnull NSDictionary<NSString *,id> *)message replyHandler:(nonnull void (^)(NSDictionary<NSString *,id> * __nonnull))replyHandler {
NSLog(@"Data delagte");
dispatch_async(dispatch_get_main_queue(), ^{
resultFromWatch = [message objectForKey:@"resultDataValue"];
});
}
更新:
- (void) session:(nonnull WCSession *)session didReceiveApplicationContext:(nonnull NSDictionary<NSString *,id> *)message {
dispatch_async(dispatch_get_main_queue(), ^{
});
}
根据ccjensen注释停止收到的错误消息
检查以下内容:
1/确保在手机端正确实现WCSessionDelegate。(不知道是否和/或到目前为止你实现了多少)
特别是,确保您实现了session(_:didReceiveMessage:replyHandler:)。
2/确保你实际上调用WCSessionDelegate中的replyHandler,如doc: 中突出显示的"你必须执行应答块作为你实现的一部分。" WCSessionDelegate协议参考
3/一旦你检查了这些,确保你运行最新版本的iPhone应用程序,然后再重新尝试手表。
如果这些不工作,那么这意味着你的WCSessionDelegate实现太慢,因此超时,或者你得到一个很好的老式手表和手机之间的网络问题(不太可能在模拟,但错误是可能的)。
希望对你有帮助。
编辑:我忘了说,对应部分的应用程序必须处于活动状态才能响应。这意味着,iPhone应用程序必须至少在后台(启动一次)才能响应。如果不是,过一段时间你会得到一个超时
请确保在激活会话之前设置了WCSession
delegate