我是这个董事会的新手。请原谅我的坏英语。
我正在尝试将子视图中的字符串发送到其父视图。如果我尝试将该字符串设置为标签,我的应用程序会崩溃并显示消息“在展开可选值时意外发现nil”。
子视图中的示例代码:
class TableViewController: UITableViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = UIColor.blueColor()
sendDataToVc("test")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func sendDataToVc(myString : String) {
let Vc = ViewController()
Vc.dataFromContainer(myString)
}
父视图中的示例:
class ViewController: UIViewController {
@IBOutlet weak var label1: UILabel!
var cacheStr1 : String!
var cacheStr2 : String?
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
label1.text = ""
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func dataFromContainer(containerData : String){
label1.text = cacheStr1
}
@IBAction func changeLabel(sender: AnyObject) {
}
我没有更多的想法我做错了什么。谢谢你的帮助。
答案 0 :(得分:0)
问题在于这一行:
let Vc = ViewController()
您正在创建新实例 - 一个新的ViewController实例。这不是你想要做的。您希望获得对现有实例的引用 - 该实例是视图控制器的父视图控制器,如果它是View Controller与TableViewController的关系。
答案 1 :(得分:0)
您最好以ViewController
表单StoryBoard
为例,并定义要作为属性传递的内容,然后将此属性设置为您需要显示的值,并在{{{的viewDidLoad中设置1}}根据需要更新您的视图