Ios 尝试使用performSegue时应用程序崩溃(标识符为,发件人为)
如果我的应用程序是通过Firebase发送的通知打开的,我当前正试图立即执行到新ViewController的切换 我试图用代码Ios 尝试使用performSegue时应用程序崩溃(标识符为,发件人为),ios,swift,Ios,Swift,如果我的应用程序是通过Firebase发送的通知打开的,我当前正试图立即执行到新ViewController的切换 我试图用代码self.performsgue(带有标识符:“testSegue”,发送者:nil)执行segue,其中“testSegue”是我的故事板中从ViewController到SecondViewController(不同类)的segue的标识符 问题是这一行正在破坏我的应用程序,我无法轻松调试这一点,因为我是从通知而不是从Xcode启动应用程序的 我还通过添加一个计时器
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áľ你是对的,没有考虑到这一点,但是将它放在主线程上是有效的,所以我想我现在可以解决它,谢谢。