2012-11-05 4 views
7

Su start up, sto cercando di eliminare tutte le partite sui server del centro di gioco tra i miei dispositivi programatically chiamando questo metodo su ogni dispositivo:removeWithCompletionHandler Errore

/** 
* called to authenticate the players game centre id 
*/ 
- (void)authenticateLocalUser 
{ 
    if (!self.gameCentreAvailable)   return; 

    NSLog(@"Authenticating Local User."); 

    if ([GKLocalPlayer localPlayer].authenticated == NO) 
    { 
     [[GKLocalPlayer localPlayer] setAuthenticateHandler:^(UIViewController* viewcontroller, NSError *error) 
     { 
      NSLog(@"Inside Authentication Handler."); 

      // if there was no error, and we got a valid view controller to display 
      if (!error && viewcontroller) 
      { 
       // get a handle to the app delegate 
       AppDelegate *delegate  = [UIApplication sharedApplication].delegate; 

       // use the view controller in the app delegate to present the authentication view controller 
       [delegate.viewController presentViewController:viewcontroller animated:YES completion: 
       ^{ 
        // once the view controller has been displayed, register the change in authentication 
        [self authenticationChanged]; 
       }]; 

       // set this class as the event handler delegate 
       GKTurnBasedEventHandler *event = [GKTurnBasedEventHandler sharedTurnBasedEventHandler]; 
       event.delegate     = self; 
      } 

      // load all of the matches the player is currently a part of 
      [GKTurnBasedMatch loadMatchesWithCompletionHandler:^(NSArray *matches, NSError *error) 
      { 
       NSLog(@"Error loading matches: %@", error); 

       // for each match 
       for (GKTurnBasedMatch *match in matches) 
       { 
        // log the id of the match 
        NSLog(@"ID of match we are removing: %@", match.matchID); 

        // and then remove it 
        [match removeWithCompletionHandler:^(NSError *error) 
        { 
         NSLog(@"Error removing match: %@", error); 
        }]; 
       } 
      }]; 
     }]; 
    } 
    else 
     NSLog(@"Already Authenticated."); 
} 

Tuttavia, il metodo non funziona, e invece mi sono salutato con questo errore nella console:

2012-11-05 08: 32: 39,699 Spinning Yarn [6266: 907] errore durante la rimozione partita: errore di dominio = GKErrorDomain Codice = 17 "le operazioni richieste impossibile completare perché uno o più parametri sono non valido." UserInfo = 0x1e5b2140 {NSLocalizedDescription = Le operazioni richieste Impossibile completare perché uno o più parametri non sono validi.}

L'unico errore che sta accadendo è all'interno della removeWithCompletionHandler: Tutto il resto va bene, e ci non ci sono errori

Qualsiasi aiuto sarebbe fantastico.

+0

Cosa dice 'error' nel gestore di completamento' loadMatchesWithCompletionHandler'? –

+0

Ho incluso il log dell'errore di caricamento delle corrispondenze per mostrare che non vi è alcun errore. –

+0

mi sembra un sacco di errori uomo –

risposta

4

Dal riferimento per removeWithCompletionHandler:

Si tratta di un errore di programmazione per chiamare questo metodo in un match che ha il giocatore locale come un partecipante attivo.

http://developer.apple.com/library/ios/#documentation/GameKit/Reference/GKTurnBasedMatch_Ref/Reference/Reference.html

Lei non è controllando che la partita è adatto per la rimozione. Potrebbe essere necessario terminare la corrispondenza per l'utente prima di "rimuoverlo". Inoltre, questo metodo è in genere pensato per gli utenti di eliminare i giochi per scelta, non automaticamente.

+0

Grazie mille amico. –