что GKSession не подключается при каждой попытке? - PullRequest
0 голосов
/ 28 июня 2011

В приложении вызывается приглашениеDidFail, иногда оно подключается правильно, а иногда нет ...

Какие могут быть возможные причины отказа в соединении?

// Display an alert sheet indicating a failure to connect to the peer.
- (void) invitationDidFail:(SessionManager *)session fromPeer:(NSString *)participantID
{
NSString *str;
if (alertView.visible) {
    // Peer cancelled invitation before it could be accepted/rejected
    // Close the invitation dialog before opening an error dialog
    [alertView dismissWithClickedButtonIndex:0 animated:NO];
    [alertView release];
    str = [NSString stringWithFormat:@"%@ is busy.\nPlease again", participantID];
    //[peerList removeAllObjects];
    [self peerListDidChange:nil];
    [self.tableData reloadData];
    //[self TwoPlayer:self];
} else {
    // Peer rejected invitation or exited app.
    str = [NSString stringWithFormat:@"%@ is busy.\nPlease try again", participantID];
    //[peerList removeAllObjects];
    [self peerListDidChange:nil];
    [self.tableData reloadData];
    //[self TwoPlayer:self];
  }
}

Даже если он не вызывает этот метод, он уверен, что устройство не сопряжено с каким-либо другим устройством, тогда каковы причины, по которым оно когда-то принимает и вызывает метод didReceivedInvitation, или какое-то время оно отказывает, вызывая приглашениеDidFail.

// Invitation dialog due to peer attempting to connect.
- (void) didReceiveInvitation:(SessionManager *)session fromPeer:(NSString     *)participantID;
{
[alertView dismissWithClickedButtonIndex:1 animated:NO];

NSString *str = [NSString stringWithFormat:@"Incoming Invite from %@", participantID];
if (alertView.visible) {
    [alertView dismissWithClickedButtonIndex:0 animated:NO];
    [alertView release];
}
alertView = [[UIAlertView alloc] 
             initWithTitle:str
             message:@"Do you wish to accept?" 
             delegate:self 
             cancelButtonTitle:@"Decline" 
             otherButtonTitles:nil];
[alertView addButtonWithTitle:@"Accept"]; 
[alertView show];
}

1 Ответ

1 голос
/ 28 июня 2011

Когда я недавно писал приложение с использованием соединений, я использовал GKSession. Я потратил недели, пытаясь отладить проблемы с подключением, и в конце концов сдался и перестал им пользоваться. При подключении к GKSession возникает ряд проблем, особенно если вы отключаетесь, а затем пытаетесь восстановить соединение в течение короткого времени (короткое время может составлять 1 минуту или более). Кажется, что соединение не сбрасывается должным образом, а затем не воссоздает соединение должным образом.

В конце концов я вынул весь код GKSession и использовал его вместо этого. Работал угощение - больше никаких проблем с подключением.

Асинхронное гнездо GCD

...