![](/img/trans.png)
[英]Swift / iOS: How to pass data from AppDelegate to ViewController label?
[英]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
var money: Double = 0.000
我錯過了什么?
謝謝!
ViewController().grabData()
將創建ViewController的新實例並調用此函數。 然后..由於視圖控制器未被使用,它將被垃圾收集/從內存中刪除。 您需要在正在使用的實際視圖控制器上調用此方法。 不是它的新實例。
最好的選擇是監聽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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.