3

この質問は以前にも聞かれたことは知っていますが、私の特定のケースでなぜうまくいかないのか疑問に思っていました.

あるView Controllerからマルチピア接続から招待を送信し、別のView Controllerで受信しようとしています。それを送信するための私のコードは次のとおりです。

[self invitePeer:selectedPeerID toSession:self.mySession withContext:nil timeout:timeInterval ];

メソッドは空白です:

 - (void)invitePeer:(MCPeerID *)peerID toSession:(MCSession *)session withContext:(NSData *)context timeout:(NSTimeInterval)timeout 
 {

 }

受信と招待のための私のコードは次のとおりです。

 - (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser didReceiveInvitationFromPeer:(MCPeerID *)peerID withContext:(NSData *)context invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler 
 {

      // http://down.vcnc.co.kr/WWDC_2013/Video/708.pdf  -- wwdc tutorial, this part is towards the end (p119)

      self.arrayInvitationHandler = [NSArray arrayWithObject:[invitationHandler copy]];
      // ask the user
      UIAlertView *alertView = [[UIAlertView alloc]
                          initWithTitle:peerID.displayName
                          message:@"Would like to create a session with you"
                          delegate:self
                          cancelButtonTitle:@"Decline" otherButtonTitles:@"Accept", nil];
      [alertView show];


  }

 - (void) alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex 
 {
      // retrieve the invitationHandler and  check whether the user accepted or declined the invitation...

      BOOL accept = (buttonIndex != alertView.cancelButtonIndex) ? YES : NO;

      // respond
      if(accept) {
              void (^invitationHandler)(BOOL, MCSession *) = [self.arrayInvitationHandler objectAtIndex:0];
    invitationHandler(accept, self.mySession);
          }
          else 
          {
              NSLog(@"Session disallowed");
          }
  }

すべてのデリゲート メソッドと同じサービス タイプを正しく設定しました。しかし、セッションを開始しようとすると、クリックしたテーブルビューセルが強調表示されたままになります...

私はinvitePeer toSessionメソッドに何かを入れなければならないと思っていますが、よくわかりません...

これは、コードで参照されているマルチピア接続に関する Apple の wwdc トークから直接コピーしたものです。

これを機能させる方法について何か提案はありますか??

4

2 に答える 2

3

このinvitePeer: toSession: withContext: timeOut:メソッドは によって実装されてMCNearbyServiceBrowserいるため、 ではなくブラウザで呼び出す必要がありますself

[browser invitePeer:selectedPeerID toSession:self.mySession withContext:nil timeout:timeInterval ];

didReceiveInvitation:ただし、招待の受け入れに関するトラブルシューティングを行う場合は、今のところアラート ビューをスキップして、広告主デリゲートのコールバックですぐに受け入れます。

編集

Multipeer Connectivity クラスからのデリゲート コールバックはプライベート キューに入ると最初に述べましたが、@Juguang が指摘したように、これはMCSessionDelegateコールバックの場合にのみ当てはまります。

于 2013-10-22T14:17:12.513 に答える