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 に答える