Я работаю над приложением, использующим 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);
}
Заранее спасибо.
Джеймс.