 <p>Well I ran into the same problem few months back and the way I fixed this was by presenting mmvc as modal view controller. Please try replacing your else with something like this:</p> <pre><code>[presentingViewController dismissModalViewControllerAnimated:NO]; GKMatchRequest *request = [[[GKMatchRequest alloc] init] autorelease]; request.minPlayers = minPlayers; request.maxPlayers = maxPlayers; request.playersToInvite = pendingPlayersToInvite; GKMatchmakerViewController *mmvc = [[[GKMatchmakerViewController alloc] initWithMatchRequest:request] autorelease]; mmvc.matchmakerDelegate = self; [presentingViewController presentModalViewController:mmvc animated:YES]; self.pendingInvite = nil; self.pendingPlayersToInvite = nil; </code></pre> <p>Also, there seem to be an issue with your authentication. Your method should use new mechanism for player authentication like:</p> <pre><code>- (void)authenticateLocalUser { if (!gameCenterAvailable) return; NSLog(@"Authenticating local user..."); if ([GKLocalPlayer localPlayer].authenticated == NO) { // Use new authentication mechanism if the iOS version is 6.0 or above if ([[UIDevice currentDevice].systemVersion compare:@"6.0" options:NSNumericSearch] != NSOrderedAscending) { [[GKLocalPlayer localPlayer] setAuthenticateHandler:^(UIViewController *vc, NSError *error) { if (error) NSLog(@"Error in authenticating User - %@", [error localizedDescription]); else if (vc) { AppDelegate *appDel = (AppDelegate *)[UIApplication sharedApplication].delegate; [appDel.navigationController presentModalViewController:vc animated:YES]; } }]; } else [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:nil]; } else { NSLog(@"Already authenticated!"); } } </code></pre>