Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 尝试使用performSegue时应用程序崩溃(标识符为,发件人为)_Ios_Swift - Fatal编程技术网

Ios 尝试使用performSegue时应用程序崩溃(标识符为,发件人为)

Ios 尝试使用performSegue时应用程序崩溃(标识符为,发件人为),ios,swift,Ios,Swift,如果我的应用程序是通过Firebase发送的通知打开的,我当前正试图立即执行到新ViewController的切换 我试图用代码self.performsgue(带有标识符:“testSegue”,发送者:nil)执行segue,其中“testSegue”是我的故事板中从ViewController到SecondViewController(不同类)的segue的标识符 问题是这一行正在破坏我的应用程序,我无法轻松调试这一点,因为我是从通知而不是从Xcode启动应用程序的 我还通过添加一个计时器

如果我的应用程序是通过Firebase发送的通知打开的,我当前正试图立即执行到新ViewController的切换

我试图用代码
self.performsgue(带有标识符:“testSegue”,发送者:nil)
执行segue,其中“testSegue”是我的故事板中从ViewController到SecondViewController(不同类)的segue的标识符

问题是这一行正在破坏我的应用程序,我无法轻松调试这一点,因为我是从通知而不是从Xcode启动应用程序的

我还通过添加一个计时器来延迟代码,该计时器在5秒后运行此行,以确定崩溃发生时它在此行,并且还尝试使用
present(viewControllerToPresent:…)

如果有人能指出崩溃发生的原因,或者在这种情况下如何调试错误,或者用其他方法让它自动进入我需要的ViewController,那就太好了,谢谢

AppDelegate.swift中的一些附加代码:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                 fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

    print(userInfo)

    let url = userInfo["url"]

    print("url is: \(String(describing: url))")

    if url != nil {

        vc.defaults.set("\(String(describing: url))", forKey: "urlDef")

        vc.defaults.set(true, forKey: "hasRun")

        initialVC.testingFunc()

        print("Func done")

    }

    completionHandler(UIBackgroundFetchResult.newData)

    print("Func finished")
}
来自ViewController.swift的一些附加代码

var funcTimer = Timer()

override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

}

func testingFunc() {

    funcTimer = Timer.scheduledTimer(timeInterval: 5, target: self, selector: #selector(self.triggerSegue), userInfo: nil, repeats: false)
    print("The timer has begun")

}

func triggerSegue() {

    print("Trigger segue func has begun")
    self.performSegue(withIdentifier: "testSegue", sender: nil)

}

显示viewController时切换到主线程

func triggerSegue() {
    DispatchQueue.main.async {
        self.performSegue(withIdentifier: "testSegue", sender: nil)
    }
}

你的崩溃日志是什么?我没有,因为我不是从Xcode运行应用程序,因为我是从Notification启动它的。没有崩溃日志,这是一个猜测,但我要做的第一件事是检查你是否在主线程上。。尝试将演示代码放在主线程上..初始化这个初始VC在哪里?@MilanNosáľ你是对的,没有考虑到这一点,但是将它放在主线程上是有效的,所以我想我现在可以解决它,谢谢。