如何从iOS排行榜中检索分数?
我想用Swift中的如何从iOS排行榜中检索分数?,ios,swift,game-center,Ios,Swift,Game Center,我想用Swift中的gk排行榜显示gk玩家的最高分数 func login() { if (GKLocalPlayer.localPlayer().authenticated) { var leaderboardRequest: GKLeaderboard! leaderboardRequest.identifier = "Best_Score" // Error: fatal error: unexpectedly found nil wh
gk排行榜显示gk玩家的最高分数
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
返回此错误消息:致命错误:在展开可选值时意外发现nil
,因为我正在强制展开包含nil的可选值
我的代码的错误在哪里?您正在声明GK排行榜,但没有初始化它。还请注意,LoadLeaderBoard WithCompletionHandler
是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排行榜request:gkleadboard?
,您将能够立即识别问题的根源,而无需编译和运行。谢谢!我应该在参数中插入什么?
?我已经能够使用断点识别问题的根源。事实上,执行此代码时会出现问题:func loadleadboardswithcompletionhandler
。再次感谢你的帮助。非常感谢。这是这里的几个问题之一。我刚刚看了GK排行榜的文档,看了我修改后的回复,谢谢你更新你的答案。不幸的是,你答案中的代码使我的应用程序崩溃。我使用了一个断点,并检测到一旦编译器在展开可选值时通过gkleadboard.loadleadboardswithcompletionhandler
找到nil
。感谢您再次更新您的答案!我感谢你花时间帮助我解决这个问题。即使使用新代码,问题仍然存在。我在gkleadboard.loadLeadboardswithCompletionHandler中放置了一个断点{objects,error in
和I get致命错误:在展开可选值时意外发现nil
。再次感谢您的帮助。在if语句中声明函数正常吗?我认为声明不正常。您想要的是使用它,正如blacksquare在下面向您展示的(类方法)。