呈现缓存的View Controller时,Swift应用程序崩溃

时间:2018-03-10 15:50:34

标签: ios swift memory uiviewcontroller segue

我的iOS应用有两个ViewControllers(VC)。当我按下VC A上的按钮时,它会显示VC B.当我按下VC B上的按钮时,它会显示VC A.这很好。但是,事实证明,每次切换时都会创建每个视图控制器的新实例,这会搞砸我的应用程序的一些功能。我试图改变它。

正如您在下面所看到的,如果一个VC已经存在,我只会创建一个新的VC实例。我在VC B中保存VC A,反之亦然。

VC A文件:

var vcB: BViewController?

func leftPresentVC() {
    if(vcB == nil) {
        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        vcB = storyboard.instantiateViewController(withIdentifier: "vcB") as! BViewController
        vcB?.transitioningDelegate = transition
        vcB?.modalPresentationStyle = .custom
        vcB?.vcA = self
    }
    present(vcB!, animated: true, completion: {})
}

VC B档案:

var vcA: AViewController?

func rightPresentVC() {
    if(vcA == nil) {

        let storyboard = UIStoryboard(name: "Main", bundle: nil)

        vcA = storyboard.instantiateViewController(withIdentifier: "vcA") as! AViewController
        vcA?.transitioningDelegate = transition
        vcA?.modalPresentationStyle = .custom
    }
    if let vcA = vcA {
        present(vcA, animated: true, completion: {})
    }
}

按下按钮时会调用leftPresentVC和rightPresentVC函数。

所以问题是这个。当我启动应用程序时,VC A按计划加载。我单击一个按钮,VC B按计划显示。然后我单击一个按钮转到VC A,应用程序崩溃。我在VC的present(vcA, animated: true, completion: {})中收到错误,说EXC_BAD_ACCESS,它给出了一个内存地址。知道问题可能是什么?

1 个答案:

答案 0 :(得分:1)

为什么你要同时展示一个。

刚刚解雇VCb,你会得到VCa

 dismiss(true, completion: nil)