重新启动应用程序会导致NSInvalidArgumentException

时间:2018-10-19 03:54:03

标签: ios swift3 segue

因此,我对应用程序的全新安装进行了检查,显示了一个对话框,要求用户设置应用程序所需的一些变量。然后,对于管理员用户,我可以选择清除应用程序缓存,然后重新启动应用程序,以便用户可以根据需要重做设置。

我使用以下代码重新启动我的应用。

func restartApplication () {
       let viewController = SomeViewController()
       let navCtrl = UINavigationController(rootViewController: viewController)

       guard
           let window = UIApplication.shared.keyWindow,
           let rootViewController = window.rootViewController
           else {
               return
       }

       navCtrl.view.frame = rootViewController.view.frame
       navCtrl.view.layoutIfNeeded()

       UIView.transition(with: window, duration: 0.3, options: .transitionCrossDissolve, animations: {
           window.rootViewController = navCtrl
       })

   }

有效。但是当应用到达viewDidAppear()并需要显示我的对话框时,该应用崩溃,提示

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 
'Receiver (<AppName.SomeViewController: 0x150dda00>) has no segue with identifier 'showSetup''

我认为我为重新启动弄乱了一些东西,或者我仍然需要做一些工作才能使它工作,但是我不知道这是什么。

我目前正在将android应用转换为iOS,因此我想做所有可以转换的事情。

这就是我的任务。

DispatchQueue.main.async {
   self.performSegue(withIdentifier: "showSetup", sender: self)
}

1 个答案:

答案 0 :(得分:0)

由于“重新启动”的视图控制器不是来自情节提要,因此对segue(依赖情节提要)的任何引用都将失败。

您需要以下内容:

images