swift ios - 如何在 AppDelegate ViewController 中 运行 发挥作用
swift ios - How to run function in ViewController from AppDelegate
我正在尝试使用 AppDelegate
运行 某些 ViewController
中的函数
func applicationDidBecomeActive(_ application: UIApplication) {
ViewController().grabData()
}
但不知何故,当应用程序从后台进入应用程序后变为活动状态时,该功能似乎根本运行。
函数看起来像这样
func grabData() {
self._DATASERVICE_GET_STATS(completion: { (int) -> () in
if int == 0 {
print("Nothing")
} else {
print(int)
for (_, data) in self.userDataArray.enumerated() {
let number = Double(data["wage"]!)
let x = number!/3600
let z = Double(x * Double(int))
self.money += z
let y = Double(round(1000*self.money)/1000)
self.checkInButtonLabel.text = "\(y) KR"
}
self.startCounting()
self.workingStatus = 1
}
})
}
并使用这个变量
var money: Double = 0.000
我错过了什么?
谢谢!
ViewController().grabData()
将创建 ViewController 的新实例并调用此函数。然后.. 由于视图控制器未在使用中,它将成为内存中的垃圾collected/removed。您需要在正在使用的实际视图控制器上调用此方法。不是它的新实例。
最好的选择是监听 iOS 提供的 UIApplicationDidBecomeActive
通知。
NotificationCenter.default.addObserver(
self,
selector: #selector(grabData),
name: NSNotification.Name.UIApplicationDidBecomeActive,
object: nil)
确保你也删除了观察者,这通常在 deinit
方法中完成
deinit() {
NotificationCenter.default.removeObserver(self)
}
我简单地这样解决了:
func applicationDidBecomeActive(_ application: UIApplication) {
let viewController = self.window?.rootViewController as! ViewController
viewController.grabData()
}
我正在尝试使用 AppDelegate
ViewController
中的函数
func applicationDidBecomeActive(_ application: UIApplication) {
ViewController().grabData()
}
但不知何故,当应用程序从后台进入应用程序后变为活动状态时,该功能似乎根本运行。
函数看起来像这样
func grabData() {
self._DATASERVICE_GET_STATS(completion: { (int) -> () in
if int == 0 {
print("Nothing")
} else {
print(int)
for (_, data) in self.userDataArray.enumerated() {
let number = Double(data["wage"]!)
let x = number!/3600
let z = Double(x * Double(int))
self.money += z
let y = Double(round(1000*self.money)/1000)
self.checkInButtonLabel.text = "\(y) KR"
}
self.startCounting()
self.workingStatus = 1
}
})
}
并使用这个变量
var money: Double = 0.000
我错过了什么?
谢谢!
ViewController().grabData()
将创建 ViewController 的新实例并调用此函数。然后.. 由于视图控制器未在使用中,它将成为内存中的垃圾collected/removed。您需要在正在使用的实际视图控制器上调用此方法。不是它的新实例。
最好的选择是监听 iOS 提供的 UIApplicationDidBecomeActive
通知。
NotificationCenter.default.addObserver(
self,
selector: #selector(grabData),
name: NSNotification.Name.UIApplicationDidBecomeActive,
object: nil)
确保你也删除了观察者,这通常在 deinit
方法中完成
deinit() {
NotificationCenter.default.removeObserver(self)
}
我简单地这样解决了:
func applicationDidBecomeActive(_ application: UIApplication) {
let viewController = self.window?.rootViewController as! ViewController
viewController.grabData()
}