2017-06-01 168 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方法中看到警报 –

相关问题