我有一个要在应用程序出现在屏幕上时运行的功能。 我尝试了所有这些方法:
override func viewWillAppear() {
generateRandomNumber()
}
override func viewDidAppear() {
generateRandomNumber()
}
override func viewDidLoad() {
generateRandomNumber()
}
尽管该函数在每次运行应用程序时都会运行,但是如果在运行应用程序后按Home botton并返回到应用程序(未终止该应用程序),则该函数不会再次执行。
更新:我尝试在ViewController中使用以下代码:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self, selector: #selector(applicationDidBecomeActive), name: UIApplication.didBecomeActiveNotification, object: nil)
}
@objc func applicationDidBecomeActive(notification: NSNotification) {
generateRandomNumber()
}
但是运行大约需要一秒钟。有更好的方法吗?
答案 0 :(得分:3)
在您的应用程序委托中,您想实现applicationDidBecomeActive
。请注意,当关闭系统警报之类的内容时,此命令也将运行。如果只想从后台返回时运行某些内容,则需要applicationWillEnterForeground
。有关完整的详细信息,请参阅UIApplicationDelegate文档中的“管理状态转换”和《 App编程指南》中的Strategies for Handling App State Transitions。
您的方法看起来基本正确;为了使用willEnterForeground
而不是didBecomeActive
,这只是一个很小的变化:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(self,
selector: #selector(applicationWillEnterForeground),
name: UIApplication.willEnterForegroundNotification,
object: nil)
}
@objc func applicationWillEnterForeground(notification: Notification) {
generateRandomNumber()
}
这里唯一要注意的是,只要视图控制器存在,此观察者就一直有效,即使它当前不在屏幕上(最常见的情况是当它出现在其他视图控制器上时) )。在某些情况下,这是有问题的,您应该调用addObserver
中的viewWillAppear
和removeObserver
中的viewDidDisappear
,而不要使用viewDidLoad
。