0

我在我的 Watch 扩展中调用了这段代码(它确实运行,用断点检查):

 [[WCSession defaultSession] sendMessage:@{
              @"load": @"main"
              } replyHandler:^(NSDictionary<NSString *,id> * _Nonnull replyMessage) {
                  ...
                  }
              } errorHandler:^(NSError * _Nonnull error) {
                  ...
              }];

在我的父应用程序中,我有:

if([WCSession isSupported]){
    NSLog(@"Apple Watch detected, activated watch deletage.");
    [WCSession defaultSession].delegate = self;
    [[WCSession defaultSession] activateSession];
}

上面的代码在应用程序启动时运行,我已经实现了:

-(void)session:(WCSession *)session didReceiveMessage:(NSDictionary<NSString *,id> *)message replyHandler:(void (^)(NSDictionary<NSString *,id> * _Nonnull))replyHandler{
    ...
}

但它永远不会被调用。我曾经让它工作,但现在,我无法正确调试我的 Watch 应用程序和 iOS 应用程序(它们不启动、超时等),我一个接一个地部署它们。当我调试 Watch 扩展时,我可以看到该sendMessage...方法被调用(几分钟后,我的错误处理程序被调用并出现超时错误),所以没有问题。当我启动我的主应用程序时,我还看到WCSession相关代码正在被命中。但是,当我启动我的 Watch 应用程序与之通信时,它didReceivedMessage...永远不会被调用。

我已经从 iPhone 和 Watch 中删除了我的应用程序,重新启动了这两个设备,然后重新启动了我的 Mac 并再次尝试,但无济于事。我究竟做错了什么?

4

1 回答 1

1

尽管 Watch 不是很可靠,但在我的情况下这是一个简单的内存分配问题。我没有强烈引用我WCSession的委托,并且在调用方法之前它被释放了。我创建了一个强大的参考,问题就消失了。

于 2016-02-17T18:54:41.520 回答