2016-06-11 4 views
1

Какой правильный способ программно принять приглашение на матч с стандартным пользовательским интерфейсом GameKit?GKTurnBasedMatch как принять новое приглашение на матч

Я видя expectedState = "предложила" foundState = "Активный" Exception

Optional(Error Domain=GKErrorDomain Code=22 
"The requested operation could not be completed because the specified participant is invalid." 
UserInfo={GKServerStatusCode=5097, 
NSLocalizedDescription=The requested operation could not be completed because the specified participant is invalid., 
NSUnderlyingError=0x14fa2cf70 { 
Error Domain=GKServerErrorDomain Code=5097 "status = 5097, 
Unexpected slot state expectedState="Invited" foundState="Active" 

Исключение происходит по следующему сценарию:
Игрок 1 - создает новый матч с игроком 2
Игрок 1 - Делает первый ход
Игрок 2 - Попытки загрузить данные из поэтапного совпадения & принять приглашение на матч.

Я использую стандартный пользовательский интерфейс iOs для создания соответствий. GKTurnBasedMatchmakerViewController

запросить новый матч

let matchRequest = GKMatchRequest() 
matchRequest.minPlayers = 2 
matchRequest.maxPlayers = 2 
matchRequest.defaultNumberOfPlayers = 2 
matchRequest.inviteMessage = "Play BoxTheDots with me" 
matchRequest.recipientResponseHandler = self.matchMaker?.recipientResponse 

let matchView = GKTurnBasedMatchmakerViewController(matchRequest: matchRequest) 
self.presentViewController(matchView, animated: true, completion: nil) 
matchView.turnBasedMatchmakerDelegate = self.matchMaker?.matchViewController 

Я принимаю приглашение матча программно, который вызывает и печать ошибки.

Поток кода начинается с GKTurnBasedMatchmakerViewControllerDelegate didFindMatch method

func turnBasedMatchmakerViewController(viewController: GKTurnBasedMatchmakerViewController, didFindMatch match: GKTurnBasedMatch){ 
    match.loadMatchDataWithCompletionHandler(self.matchDataLoaded)  
    match.acceptInviteWithCompletionHandler(self.acceptInvite) 
} 

private func acceptInvite(match:GKTurnBasedMatch?, error:NSError?){ 
    guard error == nil else { 
     LogUtil.log(.CRITICAL, sub: .ERROR, o: self, method: method, msg: "could not accept match invite. \(error)") 
     return 
    } 
} 

игрока 1 после того, как сделать первый поворот enter image description here

игрока 2 перед загрузкой матча от игрока 1 enter image description here

+0

Пожалуйста, добавьте блок кода, в котором вы вызываете 'acceptInviteWithCompletionHandler' – Thunk

+0

@Thunk Я внес изменения для включения вызова. Я все еще придерживаюсь этого :( – sdc

ответ

0

Я ответил на вопрос о полностью программно обработанные пошаговые совпадения here, и даже если вопрос о это страница об использовании стандарта GKTurnBasedMatchMakerViewController, я верю, что информация в этом сообщении может быть полезна.

Что нужно, конечно, является простой функцией делегирования с именем localPlayerDidAcceptInvitation(...). Но при отсутствии информации информация, доступная по этой ссылке, может быть полезной для совместного использования того, что работает.