【发布时间】:2019-01-20 21:24:34
【问题描述】:
我试图将玩家分数从 VC1 传递到显示所有玩家当前分数的视图 (4)。显示视图位于单独的视图控制器上,而不是定义和存储玩家分数的位置。
我已经完成了准备(segue)并且能够将其他变量传递给显示 VC(ThirdViewController)。但是当我尝试将玩家分数分配给 uilabel.text 时,它告诉我我已经打开了一个 nil 值
我什至尝试将标签文本设置为静态字符串,但仍然得到 nil 错误。
class ViewController: UIViewController {
var name = String()
var player1Score = 1
var player2Score = 2
var player3Score = 3
var player4Score = 4
//MARK: ********* IBOutlets **********
@IBOutlet weak var playerSegmentOutlet: UISegmentedControl!
@IBOutlet weak var diceSegmentOutlet: UISegmentedControl!
@IBOutlet weak var targetScoreSliderOutlet: UISlider!
@IBOutlet weak var matchTargetSwitchOutlet: UISwitch!
@IBOutlet weak var targetScoreLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let VC = segue.destination as? SecondViewController {
VC.player1CurrentScore = player1Score
VC.player2CurrentScore = player2Score
VC.player3CurrentScore = player3Score
VC.player4CurrentScore = player4Score
}
}
第二个视图控制器
class SecondViewController: UIViewController {
@IBOutlet weak var CurrentRoundScoreLabel: UILabel!
@IBOutlet weak var CurrentPlayerScoreLabel: UILabel!
var player1CurrentScore = 1
var player2CurrentScore = 1
var player3CurrentScore = 1
var player4CurrentScore = 1
override func viewDidLoad() {
super.viewDidLoad()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let VC = segue.destination as? ThirdViewController {
VC.player1ScoreLabel.text = String(player1CurrentScore)
VC.player2ScoreLabel.text = String(player2CurrentScore)
VC.player3ScoreLabel.text = String(player3CurrentScore)
VC.player4ScoreLabel.text = String(player4CurrentScore)
}
}
第三视图控制器
class ThirdViewController: UIViewController {
@IBOutlet var player1ScoreLabel: UILabel!
@IBOutlet var player2ScoreLabel: UILabel!
@IBOutlet var player3ScoreLabel: UILabel!
@IBOutlet var player4ScoreLabel: UILabel!
override func viewDidLoad() {
super.viewDidLoad()
}
}
无论我尝试用 UILabel.text 做什么,它都会显示为 nil
我非常沮丧,我确定我因为沮丧而错过了一些简单的事情,请有人帮助我。
【问题讨论】:
-
您永远不应该从 prepare 分配 destVC IBOutlet 的内容:因为 IBOutlet 还不存在,所以这不起作用。您需要设置一些 destVC 属性(通常在 destVC 中声明为可选);然后,在 destVC 的 viewDidLoad 中,使用这些属性来设置 IBOutlets(标签或其他)。
标签: swift uikit uilabel interface-builder uistoryboardsegue