错误:"消息回复耗时太长"向设备监视工具包OS 2发送消息

时间:2015-08-28 21:03:47

标签: ios objective-c watchkit

从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评论

收到的错误消息

2 个答案:

答案 0 :(得分:5)

检查以下内容:

1 /确保在手机端正确实施WCSessionDelegate。 (不知道你到目前为止是否和/或实施了多少)
特别是,请确保您实现了会话(_:didReceiveMessage:replyHandler :) 2 /确保您实际调用WCSessionDelegate中的replyHandler,如文档中所示:“您必须在实施过程中执行回复块。” WCSessionDelegate Protocol Reference
3 /一旦你检查了这些,请在重新尝试手表之前运行最新版本的iPhone应用程序。

如果这些不起作用,那么这意味着你的WCSessionDelegate实现太慢,因此超时或你在手表和手机之间得到了一个很好的旧时尚网络问题(在sim中不太可能,但是错误是可能的)。

希望这有帮助。

编辑: 我错过了提及,计数器部分应用程序必须处于活动状态才能响应。这意味着,iPhone应用程序必须至少在后台(启动一次)才能响应。 如果不是,过了一会儿就会超时。

答案 1 :(得分:0)

确保在激活会话之前设置WCSession代理