2017-12-02 165 views
-2

我正在为我的应用添加GameCenter支持。我有以下方法在我的视图控制器Game Center提交方法导致无可选解开错误

func submitToGC(newScore: Int) { 
    // Submit score to GC leaderboard 
    let bestScoreInt = GKScore(leaderboardIdentifier: LEADERBOARD_ID) 
    bestScoreInt.value = Int64(newScore) 
    GKScore.report([bestScoreInt]) { (error) in 
     if error != nil { 
      print(error!.localizedDescription) 
     } 
    } 
} 

当与任何值调用时,该代码生成“意外地发现零而展开可选值”的错误。

我该如何解决这个问题?

+1

*叹*为什么没有人阅读文档?有一种'永远不会导致崩溃的整数(forKey')方法 – vadian

+1

如何定义'viewController'变量? – Losiowaty

+0

@Losiowaty var viewController:GameViewController! 此外,GameScene文件的其他部分使用它没有问题 – Aej11a

回答

0

为什么不使用if let打开可选,而不是强制解包呢?

if let highestScore = UserDefaults.standard.object(forKey: "HighestScore") as? Int{ 
    viewController.submitToGC(newScore: highestScore) 
} 
+0

它不是一个解开的力量,而是一个强制转换。 –

0

如果submitToGC在同一个类中定义的,你不需要使用viewController.submitToGC调用的函数,你可以只使用submitToGC。此外,它最好是先解开的变量,然后把该值到函数是这样的:

if let value = UserDefaults.standard.object(forKey: "HighestScore") as Int { 
    submitToGC(newScore: value) 
} 
-1

解决的办法是实例化一个GameViewController,然后调用其与该实例的方法。