endMatchInTurnWithMatchData:completeHandler: завершается ошибкой с недопустимым состоянием
В моей пошаговой игре я получаю следующую ошибку, указывающую, что сеанс находится в недопустимом состоянии и что игра не активна:
2014-06-26 15:46:04.684 myApp[14498:60b] Error Domain=GKErrorDomain Code=24
"The requested operation could not be completed because the session is in an invalid state."
UserInfo=0x16d074a0 {GKServerStatusCode=5101, NSUnderlyingError=0x16d09fb0
"The operation couldn’t be completed. status = 5101, Game is not active, session state is Complete",
NSLocalizedDescription=The requested operation could not be completed because the session is in an invalid state.}
Эта ошибка возникает, когда я вызываю endMatchInTurnWithMatchData:completeHandler: (в этот момент настал ход локального игрока, и он выходит из игры). Однако я не понимаю, что не так с текущим состоянием. До вызова этого метода я распечатал объект соответствия. Вот содержание:
currentMatch object is:
<GKTurnBasedMatch 0x16d5e690 - matchID:c53a9ef1-d4ce-4da3-a2f3-9220df917615 bundleID:com.myCompany.myApp
status:GKTurnBasedMatchStatusOpen message:'' creationDate:2014-06-26 20:43:17 +0000
currentParticipant:
<GKTurnBasedParticipant 0x16d430d0 - playerID:G:1386520835 (local player) status:Done matchOutcome:Quit lastTurnDate:2014-06-26 20:43:35 +0000 timeoutDate:(null)>
participants:
<GKTurnBasedParticipant 0x16d430d0 - playerID:G:1386520835 (local player) status:Done matchOutcome:Quit lastTurnDate:2014-06-26 20:43:35 +0000 timeoutDate:(null)>,
<GKTurnBasedParticipant 0x16d526c0 - playerID:G:109161898 status:Active matchOutcome:Won lastTurnDate:2014-06-26 20:43:54 +0000 timeoutDate:(null)> matchData.length:712 matchDataMaximumSize:65536 exchanges:(null)>
Как видите, статус совпадения - GKTurnBasedMatchStatusOpen. Если я не ошибаюсь, это говорит о том, что игра активна. Кроме того, у каждого участника есть matchOutcome, который не является "None", что является обязательным требованием перед отправкой endMatchInTurnWithMatchData: завершению Handler:.
Вот моя последовательность кода для завершения матча, когда этот местный игрок выходит:
[currentMatch participantQuitInTurnWithOutcome:GKTurnBasedMatchOutcomeQuit nextParticipants:currentMatch.participants turnTimeout:1.0 matchData:data completionHandler:nil];
NSLog(@"currentMatch object is: %@", currentMatch);
[currentMatch endMatchInTurnWithMatchData: data
completionHandler: ^(NSError *error) {
if (error) {
NSLog(@"%@", error);
}
else {
NSLog(@"match ended successfully");
}
}];
Пожалуйста, скажите мне, что не так с моим подходом к завершению матча или с состоянием сеанса / матча, которое вызывает эту ошибку, или предложите мне, что еще я должен проверить, чтобы определить источник проблемы.
1 ответ
Я довольно поздно здесь на вечеринку, но проблема в том, чтобы позвонить ParticipantQuitInTurnWithOutcome
первый. Как только вы это сделаете, вы больше не являетесь владельцем хода. И тогда, когда вы пытаетесь endMatchInTurnWIthMatchData
(ключом является пункт "inTurn"), вы больше не являетесь владельцем, поэтому вы не в состоянии сделать это.