2017-06-01 169 views
2

我想解決以下問題: - 如果用戶強制退出應用程序,然後在強制退出後進入應用程序,我想從Core Data中獲取一些數據,然後顯示它在視圖控制器上。Swift applicationDidBecomeActive observer UIApplicationDidBecomeActive沒有被調用

我曾嘗試使用以下觀察員:

notification.addObserver(self, selector: #selector(reloadTimerOnAppStart), 
name: NSNotification.Name.UIApplicationDidBecomeActive, 
object: nil) 

,該觀察屢試不爽的應用程序加載的除外,當應用程序加載的第一次。

例如 - 強制退出應用程序 - 運行應用程序(沒有任何反應) - 關閉應用程序 - 打開應用程序(選擇作品)

它只是不解決的第一次。

我是否在錯誤的地方實例化了這個?它應該發生的的appDelegate內:

func applicationDidBecomeActive(_ application: UIApplication) { 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. 
    // check if db has any outstanding running tasks 
    // if it does then start the singleton timer 
    // display it accordingly on the view.  
} 

據對這裏最upvoted答案applicationWillEnterForeground vs. applicationDidBecomeActive, applicationWillResignActive vs. applicationDidEnterBackground

applicationDidBecomeActive應該叫,所以我只是有點不確定所發生的事情。

在另一個注意,如果你把一個UIAlert在appDelegate.swift這個函數文件

func applicationDidBecomeActive(_ application: UIApplication) { 
    AlertUser() 
    // with UIAlertController // 
} 

然後此警報每次出現!即使在應用程序強制退出之後的第一次加載時,希望能獲得一些幫助,以瞭解如何解決此問題,以便實際上可以將這個工作用於視圖控制器。

+0

究竟是添加觀察者的代碼?也許你在通知已經發送後添加觀察者 –

+0

@CatalinaT。我在viewDidLoad()裏添加觀察者是否是調用它的正確位置? –

+0

我認爲這是問題,因爲您的VC在第一次發送通知時不存在,所以觀察者在通知已經發送後添加。這就是爲什麼當應用程序來自後臺但不是第一次時它適用於所有後續調用的原因。您如何將您想要在AppDelegate中執行的代碼放在applicaionDidBecomeActive中?那不行嗎? –

回答

0

我認爲這個方法不能被調用,因爲你迫使應用程序關閉,這打破了應用程序的生命週期,也許這不會幫助你很多,但想一秒鐘。

+0

我不太確定,因爲您仍然可以在appDelegate.swift的applicationDidBecomeActive方法中看到警報 –

相關問題