来自appDelegate的performSegue错误

时间:2017-06-07 23:02:11

标签: ios swift crash segue uistoryboardsegue

我的情况很特别,因为如果在正常模式下打开应用程序,这可以正常使用。

这是在我收到推送通知后尝试这样做的时候。

在didReceive通知中:

func application(_ application: UIApplication, didReceive notification: UILocalNotification) {

我正在调用initial view controller(HOME)

中的函数
  

这只是点击通知时应用程序打开时显示的视图

let homeVC : HomeViewController! = HomeViewController()
homeVC.goAdvertisement(id, data: dataInfo)

goAdvertisement内你可以找到:

self.performSegue(withIdentifier: "mySegue", sender: itemData)

这就是错误发生的地方。

  

libc++abi.dylib: terminating with uncaught exception of type NSException

APK APPS

起初我认为它可能是时候加载视图以便我可以执行performSegue,并尝试使用以下方法延迟:

func delay(delay:Double, closure:@escaping ()->()) {
        DispatchQueue.main.asyncAfter(deadline: .now() + delay) {
            closure()
        }
    }

self.delay(delay: 4, closure: {
    let homeVC : HomeViewController! = HomeViewController()
    homeVC.goAdvertisement(id, hardwareAd: dataInfo)
}

但它不起作用

我的另一个想法是将performSegue放在一边并尝试使用present

let vc = self.storyboard?.instantiateViewController(withIdentifier: "myVcId") as! MyController
vc.data = itemData
self.present(vc, animated: true, completion: nil)

但这不起作用(崩溃指向instantiateViewController行)

非常感谢任何帮助,谢谢。

更新

关注{{3}}。终于找到了办法。

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let homeVC: HomeViewController = storyboard.instantiateViewController(withIdentifier: "homeView") as! HomeViewController

let rootViewController = self.window!.rootViewController as! UINavigationController;
rootViewController.pushViewController(homeVC, animated: false);

1 个答案:

答案 0 :(得分:1)

  

AppDelegate班级,您无法执行segue。因此,这一行将永远不会从您的AppDelegate班级开始。

self.performSegue(withIdentifier: "mySegue", sender: itemData)

你需要简单

let storyboard = UIStoryboard(name: "Main", bundle: nil)
let scheduleController = storyboard.instantiateViewController(withIdentifier: "yourIdentiFier")
self.window!.rootViewController = scheduleController
self.window!.makeKeyAndVisible()

您可以通过Main.storyboard按照以下步骤为控制器提供标识符。

  • 打开主要故事板
  • 点击您要打开的视图
  • 从该控制器顶部选择黄色/向左按钮
  • 现在打开右侧的实用工具箱
  • 现在点击Show the Identical Inspector
  • 现在,您可以将自己的身份标识为StoryBoard Id
  

谢谢这会对你有所帮助