5

iOS アプリがあり、AppleWatch でその拡張機能をプログラムしました。transferUserInfo メソッドを使用して、appleWatch 拡張機能にデータ (NSDictionary) を送信しています。シミュレーターではすべてが機能しますが、実際のデバイスでアプリケーションを実行しようとすると、iPhone がデータを送信しているにもかかわらず、iWatch が何も受信していないようです (送信者側をデバッグしたときにこの原因が見つかりました)。

両側で WCSession を構成しました。データを受信するクラスで WCSessionDelegate を適合させました。私は session:didReceiveUserInfo: メソッドを使用して ExtensionDelegate でデータを受信して​​いますが、シミュレーターではすべて正常に動作すると言ったように、実際のデバイスでは何も転送されていません。

誰が問題が何であるかの手がかりを持っていますか?

コードは次のとおりです。送信者側で:

私のクラス MensaViewController.m 内

- (void)viewDidLoad
   if ([WCSession isSupported]) {
        session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
   }
   NSLog(@"A dish is being sent");
  [session transferUserInfo:dishDictionary];
}

ishDictionary は viewDidLoad メソッド内で宣言され、データが含まれています。

レシーバー側 (Watch Extension) で WCSession を構成し、次のように ExtensionDelegate.m でデータを受信します。

- (void)applicationDidBecomeActive {
    if ([WCSession isSupported]) {
        session = [WCSession defaultSession];
        session.delegate = self;
        [session activateSession];
        NSLog(@"Session activated in iWatch");
    }
}

そして、私はデータを受け取るためにこの方法を持っています:

- (void)session:session didReceiveUserInfo:(NSDictionary<NSString *,id> *)userInfo{

    NSLog(@"Received data from the iPhone");

    NSArray<NSString*> *dictionaryKeys = userInfo.allKeys;
    for(int i = 0; i < dictionaryKeys.count; i++){
        Boolean equalsMensaString = [dictionaryKeys[i] isEqualToString:@"beilagen"];
        if(equalsMensaString)
            [self handleTransferredDish:userInfo];

        Boolean equalsNewsString = [dictionaryKeys[i] isEqualToString:@"article"];
        if(equalsNewsString)
            [self handleTransferredNews:userInfo];

        Boolean equalsEventString = [dictionaryKeys[i] isEqualToString:@"description"];
        if(equalsEventString)
            [self handleTransferredEvents:userInfo];

    }
}
4

2 に答える 2