Search code examples
iosswiftios7ios8game-center-leaderboard

Showing leaderboard crashes app because showViewController isn't supported


What is the right way to present Game Center leaderboards in iOS 7? The code below crashes on showViewController because it only supports iOS 8. Other Stack Overflow posts suggest using presentViewController for iOS 7, but that only shows a blank leaderboard.

func showLeaderboards() {
    // User logged into GameCenter?
    if (!GKLocalPlayer.localPlayer().authenticated) {
        println("Local player not authenticated")
        // Show message
        return
    }

    // If here, user authenticated. Present leaderboards.
    var gcViewController = GKGameCenterViewController()
    gcViewController.gameCenterDelegate = self
    gcViewController.viewState = GKGameCenterViewControllerState.Leaderboards
    gcViewController.leaderboardIdentifier = HighScoresLeaderboardKey
    self.showViewController(gcViewController, sender: self)
    self.navigationController?.pushViewController(gcViewController, animated: true)
}

Solution

  • If your app targets iOS 7.x, you should use the following code:

    self.presentViewController(gcViewController, animated: true, completion: nil)
    

    instead of:

    self.showViewController(gcViewController, sender: self)