我有两个viewcontrollers,我必须将值从第二个vc传递到第一个vc。也就是说,必须将字符串nameText
附加到我的firstvc中的数组nameArray
中。这就是我在secondvc中所做的事情:
let homeViewController: HomeViewController = storyboard?.instantiateViewController
(withIdentifier: "homeViewControllerIdentifier") as! HomeViewController
homeViewController.nameArray.append(nameText)
我在上面的最后一个语句中设置了一个断点^并且po homeViewController.nameArray.first
我得到了值。但是当我在控件返回到第一个vc时也这样做,并且我尝试使用该数组时,它表示它是nil
。我想在这一行,homeViewController.nameArray.append(nameText)
,我在数组中添加一个值?这有什么问题?提前致谢。
答案 0 :(得分:1)
您的代码无法正常工作的原因,因为您正在实例化旧的viewcontroller并创建它的新实例。
您需要在此处创建委托/协议。类似的东西:
protocol ViewDelegate{
func updateArray()
}
class Class1: UIViewController{
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let vc = segue.destinationController as! Class2
vc.delegate = self
}
}
extension Class1: ViewDelegate {
func updateArray(){
// update array here
}
}
class Class2: UIViewController{
var delegate: ViewDelegate!
func updatearrayhere(){
delegate.updateArray()
}
}