导航后重新创建ViewController对象?

时间:2017-05-02 14:53:33

标签: ios segue

现在我创建了一个新项目来测试unwind segue。

在故事板中,故事条目位于VC0上,VC0中的按钮进入VC1(模态),VC1中的按钮进入VC2(模态)。

VC2有一个解除自身的按钮,在功能中它看起来像这样:

@IBAction func btnDismiss(_ sender: Any) {
    dismiss(animated: true, completion: nil)
}
VC1中的

我添加了一个展开函数,如下所示:

@IBAction func unwindSecondView(segue: UIStoryboardSegue){
    print("unwinded")
}

然后在故事板中,我将VC2的退出图标链接到unwindSecondview作为操作。

它工作得很好,但是当我点击VC2中的“关闭”按钮后,VC1短暂出现并跳回到VC0。

???什么错误导致跳回到VC0?

--------------初步问题-----------------

我是iOS新手,对于如何创建和激活VC感到困惑。

假设我在单个视图应用中创建了2个ViewControllers。 MainController(VC_M)和SettingsController(VC_S)。我在故事板中添加了segues,VC_M中的设置按钮转到VC_S,VCS收集信息,写入standardDefaults,然后ok按钮返回VC_M并刷新其视图。

当我尝试在VC_M中保留一些信息时,我发现在单击VC_S中的“确定”按钮并返回到VC_M后,将重新创建VC_M并调用viewDidLoad()。在调试器中,它显示VC_M对象(self)现在在内存中有不同的地址,所以它似乎是该类的另一个实例。

这是正常行为吗?最好保存旧的VC_M对象,这样就不需要重新加载某些数据了。最初我以为我可以把一些数据加载到init()中,但是当重新创建VC_M时,init()也被调用了。一些较旧的帖子建议不应再次调用ViewDidLoad(),而应调用ViewDidAppear(),但我不确定它现在是否是相同的情况。

在我的情况下,最好只使用standardDefaults重新加载所有内容,还是应该使用不同类型的segue? (我用push segue)。

0 个答案:

没有答案