从Apple Watch向设备发送消息时出现以下错误
错误域= WCErrorDomain代码= 7012"邮件回复花费的时间太长。" UserInfo = {NSLocalizedDescription =邮件回复花了太长时间。, NSLocalizedFailureReason =发生回复超时。}
#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
}];
}
设备
在appdelegate didFinishLaunching
// Watch kit session
if ([WCSession isSupported]) {
WCSession *session = [WCSession defaultSession];
session.delegate = self;
[session activateSession];
NSLog(@"\n\n - WatchKit Session Started - \n\n");
}
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评论
收到的错误消息答案 0 :(得分:5)
检查以下内容:
1 /确保在手机端正确实施WCSessionDelegate。 (不知道你到目前为止是否和/或实施了多少)
特别是,请确保您实现了会话(_:didReceiveMessage:replyHandler :)
2 /确保您实际调用WCSessionDelegate中的replyHandler,如文档中所示:“您必须在实施过程中执行回复块。” WCSessionDelegate Protocol Reference
3 /一旦你检查了这些,请在重新尝试手表之前运行最新版本的iPhone应用程序。
如果这些不起作用,那么这意味着你的WCSessionDelegate实现太慢,因此超时或你在手表和手机之间得到了一个很好的旧时尚网络问题(在sim中不太可能,但是错误是可能的)。
希望这有帮助。
编辑: 我错过了提及,计数器部分应用程序必须处于活动状态才能响应。这意味着,iPhone应用程序必须至少在后台(启动一次)才能响应。 如果不是,过了一会儿就会超时。
答案 1 :(得分:0)
确保在激活会话之前设置WCSession
代理。