2016-11-18 38 views
0

我刚开始学习迅速,我有一个问题。 我有两个视图控制器,我试图从图1发送一个字符串,视图2.Xcode 8 - 意外发现无

这是我到目前为止有:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
{ 
if segue.identifier =="1" 
{ 
let DestViewControl = segue.destination as! ViewController2 
DestViewController.count = 9 
} 
} 

计数是针对一个变量到目前为止,这工作很好。 但是,如果我想自动更改视图2中的标签中的文本,如DestViewController.lb_ExLabem.text =“test”,则会发生致命错误“意外地发现零,同时展开可选值”。

让我知道你是否有任何想法。

感谢

回答

1

在segue之前,你的插座是零(因为视图未加载)。

在DestViewController,你应该创建一个变量来存储文本:

class ViewController2{ 
    @IBOutlet weak var your_label: UILabel! 
    var label_tex=String() 
} 

启动它prepareForSegue:

override func prepare(for segue: UIStoryboardSegue, sender: Any?){ 
    if segue.identifier =="1"{ 
     let DestViewControl=segue.destination as! ViewController2 
     DestViewController.label_tex="9" 
    } 
} 

最后在ViewController2,更改标签文本当视图加载(和你的插座不是零):

override func viewWillAppear(_ animated: Bool){ 
    your_label.text=label_tex 
} 
+1

谢谢,想到这个旁路,并做到了我n viewDidLoad,我只是试图找到一种不分配标签的方式。 – Necro1992

0

错误只是意味着你的DestViewController.lb_ExLabem变量的值是nil。确保变量中有一个值,以免发生错误。

1

lb_ExLabem在你DestViewController,当你试图将其设置这样

DestViewController.lb_ExLabem.text = "test" 

nil。(由于风景被很多)

尝试设置的lb_ExLabem值在viewWillAppear()DestViewController它会工作