ios - 如何从 iOS 的排行榜中检索分数?

标签 ios swift game-center

我想在 Swift 中用 GKLeaderboard 显示 GKPlayer 的最高分。

func login() {

if (GKLocalPlayer.localPlayer().authenticated) {

        var leaderboardRequest: GKLeaderboard!
        leaderboardRequest.identifier = "Best_Score"

        // Error: fatal error: unexpectedly found nil while unwrapping an Optional value
        func loadLeaderboardsWithCompletionHandler(completionHandler: (([AnyObject]!,
            NSError!) -> Void)!) {

             var localPlayerScore: GKScore = leaderboardRequest.localPlayerScore
        }
    }
}

不过,func loadLeaderboardsWithCompletionHandler 返回此错误消息: fatal error :在展开可选值时意外发现 nil 因为我强制展开包含 nil 的可选。

我的代码哪里出错了?

最佳答案

您正在声明 GKLeaderboard,但未对其进行初始化。还要注意 loadLeaderboardWithCompletionHandler 是 GKLeaderBoard 的类函数。改为这样做:

if (GKLocalPlayer.localPlayer().authenticated) {
    GKLeaderboard.loadLeaderboardsWithCompletionHandler { objects, error in
       if let e = error {
           println(e)
       } else {
           if let leaderboards = objects as? [GKLeaderboard] {
               for leaderboard in leaderboards {
                   if let localPlayerScore = leaderboard.localPlayerScore {
                        println(localPlayerScore)
                   }
               }
            }
       }
   }
}

作为旁注,使用隐式展开的可选值是不安全的,即任何用 ! 声明的东西。以您的程序为例:您可以对其进行编译,但必须深入了解您的代码才能找到实际发生运行时错误的位置。如果您声明了 var leaderBoardRequest: GKLeaderBoard?,您将能够立即确定问题的根源,而无需编译和运行。

关于ios - 如何从 iOS 的排行榜中检索分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28798918/

相关文章:

html - 当输入集中在移动 safari 上时,页面底部出现不需要的填充

ios - 快速更改 UINavigationBar 中 UIBarButtonItem 的位置

ios - 保存高分并在 Game Center 排行榜中显示不同的排行榜

ios - Swift 3 中的 Alamofire?

ios - Swift 将 AnyObject 转换为 block

ios - 为什么要调用 loadMatchWithID :withCompletionHandler crash only on iPad 1 with iOS 5

ios - 如何使用 Swift 修复 iOS 应用程序上的 fatal error ?

ios - 当且仅当 CGPoint 在 View 内持续 2 秒时才启动函数

ios - Tesseract hOCR iOS

iOS Xcode 4.3 TableView Controller 和 XML 解析