Правильный ответ удаленному игроку в Game Center

У меня есть пошаговый матч с двумя участниками, A и B. В настоящий момент это поворот. B выходит из очереди, вызывая:

[match participantQuitOutOfTurnWithOutcome:GKTurnBasedMatchOutcomeQuit ... etc.

Что касается приложения Game Center, то совпадение с B все еще находится в игре - состояние соответствия - GKTurnBasedMatchStatusOpen, а результаты соответствия - GKTurnBasedMatchOutcomeNone и GKTurnBasedMatchOutcomeQuit соответственно.

Из документации видно, что участник A должен обнаружить это и вызвать:

participantA.matchOutcome = GKTurnBasedMatchOutcomeWon;
participantB.matchOutcome = GKTurnBasedMatchOutcomeQuit;

[self endMatchInTurnWithMatchData: ... etc.

Однако для participantQuitOutOfTurnWithOutcome, как представляется, нет уведомлений, и периодическое повторение каждого конца каждого конца до конца выглядит как kludge.

Каков правильный подход к окончанию этих совпадений?

Ответ 1

У него хорошее решение:)

Прежде всего вы установите обработчик

[GKTurnBasedEventHandler sharedTurnBasedEventHandler].delegate = self;

После этого вы получите обратные вызовы

handleInviteFromGameCenter:
handleTurnEventForMatch:didBecomeActive:
handleMatchEnded:
handleTurnEventForMatch:didBecomeActive:
handleTurnEventForMatch:didBecomeActive:
player:receivedExchangeRequest:forMatch:
player:receivedExchangeCancellation:forMatch:
player:receivedExchangeReplies:forCompletedExchange:forMatch:

Вам нужен этот метод

handleMatchEnded:

Чтобы обработать конец матча на стороне противника.

Вот ссылка на документацию https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/GameKit_Guide/ImplementingaTurn-BasedMatch/ImplementingaTurn-BasedMatch.html#//apple_ref/doc/uid/TP40008304-CH15-SW12