Multipeer Conectivity Framework を使用するアプリに取り組んでいます。これまでのところ、すべて順調に進んでおり、プログラムによるブラウジングと招待を実装しました。
私の問題は、ユーザーが招待を受け入れると、ブラウザーが状態の変更を受信していないため、セッションが作成されないことです。
これは、ブロックと統合されたアクション シートを使用して作成した広告主の招待方法です。
- (void)advertiser:(MCNearbyServiceAdvertiser *)advertiser
didReceiveInvitationFromPeer:(MCPeerID *)peerID
withContext:(NSData *)context
invitationHandler:(void(^)(BOOL accept, MCSession *session))invitationHandler
{
[UIActionSheet showInView:self.view
withTitle:[[NSString alloc]initWithFormat:@"%@ would like to share %@ information with you.",peerID.displayName, (NSString *)context]
cancelButtonTitle:@"Cancel"
destructiveButtonTitle:@"Deny"
otherButtonTitles:@[@"Accept"]
tapBlock:^(UIActionSheet *actionSheet, NSInteger buttonIndex) {
NSLog(@"%i",buttonIndex==1?true:false);
MCSession *newSession=[[MCSession alloc]initWithPeer:[[MCPeerID alloc] initWithDisplayName:@"CRAP23456"]];
[newSession setDelegate: self];
NSLog(@"button index %i ",buttonIndex==1?true:false);
invitationHandler(buttonIndex==1?YES:NO,newSession);
}];
}
上記のメソッドが呼び出され、招待ハンドラが正しい値を返しています。
ブラウザ側からの私の実装は非常に単純です。これは、ユーザーがメソッドを受け入れる/拒否するときに呼び出されるメソッドです。ただし、ユーザーが招待を辞退した場合にのみ呼び出されます。
- (void)session:(MCSession *)session peer:(MCPeerID *)peerID didChangeState:(MCSessionState)state
{
NSLog(@"%d",state);
NSLog(@"%ld",(long)MCSessionStateConnected);
}
前もって感謝します。
ジェームズ。