簡體   English   中英

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

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM