添加准备功能后导航栏消失

时间:2017-08-27 08:56:48

标签: ios swift uinavigationcontroller

我正在录制录音APP。

我尝试在我的第一个录制视图控制器中添加导航控制器,然后使用以下函数准备将文件名数组传递给第二个视图控制器:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    let controller = segue.destination as? MainViewController
    controller?.recordArray = recordingArray
    self.present(controller!, animated: true, completion: nil)
}

然而,当在模拟器中运行时,导航栏在第二个控制器中消失,Xcode弹出警告

  

线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x7fff51edfff8)

有人有任何建议吗? 谢谢!

2 个答案:

答案 0 :(得分:0)

请勿在{{1​​}}内拨打present(_:animated:completion:)

在即将发生segue之前,系统会自动调用

prepare(for segue:),以便您准备数据以便发送到目标viewcontroller,或者在执行segue之前执行您需要的任何其他计算。需要在Storyboard中设置segue,它将自动调用,或者如果是手动调用,则需要使用prepare(for segue)调用它,一旦执行此操作,系统将调用perform(segue)为了你。你可以看到为什么调用另一个导航函数证明是有问题的,因为你试图使用两种不同的方法(segue和present)导航到另一个viewcontroller。

如果您还没有在故事板中设置segue,那么您还需要这样做,因为如果没有设置,prepare(for segue)将是let controller = segue.destination as? MainViewController

在Storyboard中设置segue后,这就是你的功能的样子:

nil

答案 1 :(得分:0)

您不应该尝试在此方法中呈现VC,它只是您在segue呈现之前配置目标VC的地方

dependencies {
    compile fileTree(dir: 'libs', include: ['*.jar'])
    compile project(':common-util')
    // common-util is an Android module, which references other Android
    // methods such as Log.d, android.util class methods, etc.
}