错误:"Message reply took too long"向设备发送消息 监视套件操作系统 2



从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

最新更新