2017-09-05 24 views
2

目前我試圖執行SEGUE到一個新的視圖控制器立即如果我的應用程序是通過從火力地堡發通知打開。應用程序試圖在崩潰時使用performSegue(withIdentifier:,發件人:)

我正在嘗試執行代碼爲self.performSegue(withIdentifier: "testSegue", sender: nil)的segue,其中「testSegue」是Storyboard中從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) 

} 

My segue in the Storyboard

+0

什麼是你的崩潰日誌 – Govaadiyo

+0

我沒有一個,原因在於我沒有運行在Xcode應用程序的事實,因爲我從通知 –

+1

啓動它是胡亂猜測,而不崩潰日誌,但我會做的是檢查你是否是在主線程的第一件事..嘗試把該演示代碼在主線程.. –

回答

4

切換到主線程,當你呈現的viewController。

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