无法更改视图控制器属性的实例

时间:2016-09-23 08:50:05

标签: ios swift viewcontroller

  

我在第一个视图控制器中有这个按钮,按下它时,它   触发2动作:

     
      
  • 一个函数iterateItems
  •   
  • 动画为ResultViewController
  • 的segue   

我需要将dataSource的{​​{1}}设置为ResultViewController才能完成其视图,并且只有在bestComposition完成后才能获取此属性的值,我把这段代码放在iterateItems

iterateItems

但是,在print(bestComposition.count) let resultVC = ResultViewController() resultVC.dataSource = bestComposition 的{​​{1}}方法中,viewDidAppear的值未更改,此处为ResultViewController

dataSource

ResultViewControllervar dataSource = [WeaponItems]() override func viewDidAppear(_ animated: Bool) { print(dataSource.count) ... } 的值为3,dataSource中的值始终为0,为什么它不会发生变化?

编辑(准备segue的代码):

ViewController

2 个答案:

答案 0 :(得分:1)

resultVC是ResultViewController的一个实例,由该行新创建:

let resultVC = ResultViewController()

这不是作为segue的一部分自动创建的实例。永远不会显示resultVC,因此viewDidAppear永远不会运行,因此永远不会执行print语句。同时,会显示由segue创建的实例,因此viewDidAppear确实运行 - 但其dataSource的值不变。尝试:

let resultVC = segue.destinationViewController as! ResultViewController

答案 1 :(得分:0)

试试这个:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let secondVC = segue.destination as! ResultViewController
    secondVC.transitioningDelegate = self
    secondVC.modalPresentationStyle = .custom
    secondVC.dataSource = bestComposition
}