Wie kann man eine Match-Einladung programmatisch mit der Standardbenutzeroberfläche von GameKit akzeptieren?GKTurnBasedMatch, wie man eine neue Einladung zum Spiel akzeptiert
ich sehe eine expectedState = "eingeladen" foundState = "Aktiv" Ausnahme
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"
Die Ausnahme unter folgendem Szenario eintritt:
Spieler 1 - Erstellt ein neues Spiel mit dem Spieler 2
Spieler 1 - Macht den ersten Zug
Spieler 2 - Versuche, Daten aus dem rundenbasierten Spiel & zu laden, akzeptieren die Einladung zum Spiel.
Ich benutze die Standard-Benutzerschnittstelle von iOs für Match-Making. GKTurnBasedMatchmakerViewController
Anfordern eines neuen Spiel
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
ich programmatisch das Spiel Einladung bin zu akzeptieren, die verursacht, und das Drucken der Fehler.
Der Code Fluss geht von den 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
}
}
Spielern 1 nach der ersten Kurve macht
Spieler 2 vor dem Laden Spiel von Spieler 1
Fügen Sie bitte den Codeblock hinzu, in dem Sie 'acceptInviteWithCompletionHandler' anrufen. – Thunk
@Thunk Ich habe oben Bearbeitungen vorgenommen, um den Anruf einzuschließen. Ich stecke immer noch auf diesem einen :( – sdc