2013-10-10 12 views
6

Sto lavorando a un gioco GameCenter a turni. A GKMatchRequest viene creato un GKTurnBasedMatch, con minPlayers e maxPlayers impostato su 2. Ottengo un NSInvalidArgumentException mentre provo a terminare il gioco con endMatchInTurnWithMatchData, dicendomi che non ho impostato matchOutcome su tutti i partecipanti. I registri per l'oggetto partita giusta prima di questo punto di rivelare che la mia partita simile a questa:GKTurnBasedI partecipanti alla partita non sono corretti/duplicati

<GKTurnBasedMatch 0x1c1f2af0 - matchID:c9de6e47-0e9a-4dbe-944b-d2fd4ecd3044 bundleID:com.mybundle.wd status:GKTurnBasedMatchStatusEnded message:'Game Over' creationDate:2013-10-08 01:26:12 +0000 currentParticipant:(null) participants: 
<GKTurnBasedParticipant 0x1c184820 - playerID:G:128458444 (local player) status:Done matchOutcome:Lost lastTurnDate:2013-10-10 21:54:22 +0000 timeoutDate:(null)>, 
<GKTurnBasedParticipant 0x1c1b0a80 - playerID:G:220673962 status:Done matchOutcome:Lost lastTurnDate:2013-10-10 18:26:16 +0000 timeoutDate:(null)>, 
<GKTurnBasedParticipant 0x16ef1610 - playerID:G:128458444 (local player) status:Active matchOutcome:None lastTurnDate:(null) timeoutDate:(null)>, 
<GKTurnBasedParticipant 0x16ec64f0 - playerID:(null) status:Matching matchOutcome:None lastTurnDate:(null) timeoutDate:(null)> matchData.length:871 matchDataMaximumSize:65536 exchanges:(null)> 

ho più di 2 GKTurnBasedParticipants qui, e due di loro sono lo stesso giocatore! Non faccio nulla di straordinario nel gioco, ad eccezione chiamando il seguente ogni turno:

[match endTurnWithNextParticipants:@[nextParticipant] turnTimeout:GKTurnTimeoutDefault matchData:data completionHandler:^(NSError *error){...}] 

Qualcuno ha idea di cosa sta succedendo qui? È un gioco a due giocatori, quindi come faccio a finire con un oggetto match incasinato, e come posso impedirlo?

+0

Ho appena incontrato anche questo. Hai trovato una causa/soluzione? – Bart

+0

Non così lontano - l'ho presentato come un bug per Apple, ma ho poche speranze per questo. Ci sono numerosi tipi di errori che possono derivare da questo, che ti impediranno di inviare il prossimo turno. Finora, penso che l'unica cosa da fare sia rilevare questa condizione e uccidere l'incontro con delle scuse. –

+0

Peccato. Grazie. – Bart

risposta

0

faccio la seguente per terminare il gioco

 ((GKTurnBasedParticipant*)[currentMatch.participants objectAtIndex:1]).matchOutcome = GKTurnBasedMatchOutcomeWon; 
     ((GKTurnBasedParticipant*)[currentMatch.participants objectAtIndex:0]).matchOutcome = GKTurnBasedMatchOutcomeLost; 

allora io chiamo

[currentMatch endMatchInTurnWithMatchData:data completionHandler:^(NSError *error) 
{ 
     if (error) 
     { 
      NSLog(@"%@", error); 
     } 
     else{ 


     } 
    }]; 
+0

Grazie, ma questo non risponde alla domanda. Mi piacerebbe sapere che cosa fa sì che la partita a 2 giocatori abbia 4 o più partecipanti duplicati in primo luogo. –

0

ho presentato un bug con Apple e quattro mesi più tardi ottenuto questo in email:

Ciao Kirill,

Questo è un follow-u p per quanto riguarda l'ID di bug # 15615850.

Riteniamo che questo problema è stato risolto. Verifica con iOS 7.1 beta 4 (11D5134c) e aggiorna il rapporto con i risultati.

Quindi - sì, è confermato come un bug, ancora non so di una soluzione alternativa, ma una volta che esce 7.1, ci libereremo di esso.

+0

Ho lo stesso problema in iOS 7.1 (in ambiente sandbox). Sono quattro i partecipanti quando dovrebbero essere due. Ogni corretta appare (erroneamente) due volte. – Drux

+0

Confermato - succede ancora. Penso che sia in qualche modo legato alle partite che iniziano come inviti ad un amico. Non riesco a trovare alcun modello per questo ancora. –

Problemi correlati