我是Swift和iOS开发的新手。我目前有2 ViewControllers
,第一个button
,第二个label
。我已将第一个button
与第二个ViewController
相关联,并且转换有效。
现在,当我尝试更改标签的文本时,我收到错误:
致命错误:在打开Optional时意外发现nil 值
在这里,您可以在第一个ViewController
找到我的准备功能:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! SecondViewController
vc.secondResultLabel.text = "Testing"
}
}
可能是第二个ViewController
中的标签受到某种程度的保护吗?
感谢您的帮助
答案 0 :(得分:5)
您需要将String
传递给SecondViewController
,而不是直接设置它,因为尚未创建UILabel
。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! SecondViewController
vc.secondResultLabelText = "Testing"
}
}
在您的SecondViewController
viewDidLoad
方法中,将UILabel
设置为字符串
var secondResultLabelText : String!
override func viewDidLoad() {
secondResultLabelText.text = secondResultLabelText
}
答案 1 :(得分:3)
在第二个视图控制器中添加一个字符串变量
var labelText: String!
在第二个视图控制器中(在viewDidLoad中)
self.secondResultLabel.text = self.labelText
然后第一个视图控制器准备segue
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! SecondViewController
vc.labelText = "Testing"
}
}
这是因为第二个视图控制器的UILabel Outlet尚未在为segue做准备时进行初始化
Rikh的答案是一样的,他的答案和我的答案都是一样的
答案 2 :(得分:2)
欢迎乘坐:))
您的问题是,当您致电SecondViewController
时,您的vc.secondResultLabelText
,更具体的prepare
未启动,因此当时secondResultLabel
实际上为零。
您需要向SecondViewController
添加变量,如下所示:
var labelText: String = ""
然后设置该值:
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "mySegue" {
let vc = segue.destination as! SecondViewController
vc.labelText = "Testing"
}
}
在您viewWillAppear
的{{1}}或viewDidLoad
中,您可以使用该SecondViewController
的值,该值已准备就绪,已连接且不会崩溃
secondResultLabelText
希望有所帮助。
答案 3 :(得分:0)
首先在SecondViewController中获取一个全局变量...例如,我采用了" secondViewControllerVariable"。然后获取要在SecondViewController中显示的文本。
override func prepare(for segue: UIStoryboardSegue, sender: Any?)
{
if segue.identifier == "mySegue"
{
let vc = segue.destination as! SecondViewController
vc.secondViewControllerVariable = "Your string you get in FirstViewController"
}
}
然后在你的SecondViewController中,在viewDidLoad方法中将UILabel设置为字符串
var secondViewControllerVariable : String! // You have to declare this first in your SecondViewController Globally
override func viewDidLoad()
{
vc.secondResultLabelText.text = secondViewControllerVariable
}
那就是它。快乐的编码。