我想在 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/