【问题标题】:restarting app causes NSInvalidArgumentException重新启动应用程序导致 NSInvalidArgumentException
【发布时间】:2019-03-23 22:49:15
【问题描述】:

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

我使用下面的代码重新启动我的应用程序。

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,所以我想做所有可以转换的事情。

这就是我做segue的方式。

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

【问题讨论】:

  • 您首先使用什么代码来显示设置?问题可能就在那里

标签: ios swift3 segue


【解决方案1】:

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

你需要这样的东西:

func restartApplication () {
   let navCtrl = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("NavController")

   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
   })

}

【讨论】:

  • 所以,我需要这样重新启动代码,对吧?
  • 是的,它从storyboard中获取导航控制器,这样导航控制器就可以执行segue了。
  • 哦,我明白了。我试试看
  • 所以我试了一下,但它再次抛出NSInvalidArgumentException。不包含带有“SomeViewController”的视图控制器
  • 哦。我需要设置Storyboard IDViewController 以使其工作。谢谢男人
猜你喜欢
  • 1970-01-01
  • 2013-09-02
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多