如果我的应用程序是通过Firebase发送的通知打开的,我目前正在尝试立即执行一个新的ViewController。
我尝试使用代码self.performSegue(withIdentifier: "testSegue", sender: nil)
执行segue,其中" testSegue"是我的Storyboard中从ViewController到SecondViewController(不同类)的segue的标识符。
问题是这一行崩溃了我的应用程序,由于我从通知中启动应用程序而不是从Xcode启动应用程序,因此我无法轻松调试。
我还通过在5秒后添加运行此行的Timer来延迟代码,以确定崩溃发生时它位于此行,并且还尝试使用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)
}
答案 0 :(得分:4)
在展示viewController时切换到主线程。
func triggerSegue() {
DispatchQueue.main.async {
self.performSegue(withIdentifier: "testSegue", sender: nil)
}
}