[英]When my game ends I need to 'send' the variable holding the score to a table view controller
游戲結束時,我需要將保存分數的變量“發送”到表視圖控制器。 我嘗試通過
//In LeaderboardTableVC.swift
var gameScore:Int! = 0
//In GameScene.swift
var leadVC: LeaderboardTableVC!
var score:Int = 0
func showLeaderboard(){
let sb = UIStoryboard(name: "Main", bundle: nil)
let leaderBoardVC = sb.instantiateViewController(withIdentifier: "leaderboard")
self.vc.navigationController?.pushViewController(leaderBoardVC, animated: true)
leadVC.gameScore = score
}
但是,當我運行代碼時,會發生錯誤:'leadVC.gameScore = score'代碼行上“意外發現nil,同時展開了一個可選值”。 有什么建議么?
您已經實例化了leaderBoardVC
,但是從未設置leadVC
屬性。 因此,當您嘗試設置gameScore
時, leadVC
仍然nil
,因此當它嘗試對此隱式解包的可選內容進行強制解包時,它會崩潰。
坦白說,我可能會完全淘汰leadVC
屬性,從而完全避免了這個問題。 為什么需要此屬性? 無論如何,您可以執行以下操作:
//In GameScene.swift
// var leadVC: LeaderboardTableVC!
var score:Int = 0
func showLeaderboard(){
let sb = UIStoryboard(name: "Main", bundle: nil)
guard let leaderBoardVC = sb.instantiateViewController(withIdentifier: "leaderboard") as? LeaderboardTableVC else {
fatalError("Either couldn't find scene with `leaderboard` identifier, or its base class was not `LeaderboardTableVC`")
}
leaderBoardVC.gameScore = score
self.vc.navigationController?.pushViewController(leaderBoardVC, animated: true)
}
注意,我可能會在gameScore
之前設置gameScore
。
或者,如果您確實需要此屬性,則可以執行以下操作:
//In GameScene.swift
var leadVC: LeaderboardTableVC!
var score: Int = 0
func showLeaderboard() {
let sb = UIStoryboard(name: "Main", bundle: nil)
leadVC = sb.instantiateViewController(withIdentifier: "leaderboard")
leadVC.gameScore = score
self.vc.navigationController?.pushViewController(leadVC, animated: true)
}
這只是一個問題,為什么您要對這個leadVC
保持強烈的引用(例如,當您彈出時,它將保留在內存中)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.