当前位置: 首页 > 面试题库 >

swift iOS-如何从AppDelegate在ViewController中运行功能

姚子石
2023-03-14
问题内容

我正在尝试ViewController使用某些功能AppDelegate

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的新实例并调用此函数。然后,由于不使用视图控制器,它将被垃圾回收/从内存中删除。您需要在使用中的实际视图控制器上调用此方法。不是它的新实例。

最好的选择是监听UIApplicationDidBecomeActiveiOS提供的通知。

NotificationCenter.default.addObserver(
    self,
    selector: #selector(grabData),
    name: NSNotification.Name.UIApplicationDidBecomeActive,
    object: nil)

确保您也删除了观察者,这通常是通过一种deinit方法完成的

deinit() {
    NotificationCenter.default.removeObserver(self)
}


 类似资料:
  • 问题内容: 当用户单击UILocalNotification时,我试图迅速从应用程序委托中加载特定的ViewController。我已经知道这是在此函数中调用的: 但是当我尝试访问一个打开的ViewController时,我认为它返回null,因为我的应用程序崩溃了。这是我正在尝试的: 在popToViewController行上崩溃了。 问题答案: 您可以尝试: 斯威夫特3:

  • 问题内容: 在我的Xcode项目中,当用户点击通知时,我想先将其发送到tabBar中的某个项目,然后再实例化视图控制器并将对象发送到该视图控制器。我有将它们发送到所需的tabBar的代码,但我不知道如何在将tabBar和导航栏保持与视图控制器连接的同时将它们实例化到视图控制器。关于此问题的所有答案都需要您更改根视图控制器,这使我在调用视图控制器时失去了与tabBar和导航栏的连接。 一个真实的例子

  • 问题内容: 我有一个具有某些功能的脚本。 我可以直接从命令行运行功能之一吗? 像这样吗 问题答案: 如果脚本仅定义函数,而不执行其他任何操作,则可以先使用or 命令在当前shell的上下文中执行脚本,然后简单地调用函数。请参阅以获取更多信息。

  • 问题内容: 我在Node中编写一个Web应用程序。如果我有一些带有函数的JS文件,如何从命令行调用该函数? 问题答案: 对于您为什么要这样做,或者什么是更标准的做法,没有任何评论:这是您问题的解决方案…。请记住,命令行所需的引号类型可能会有所不同。 在您中,导出功能。有很多方法,但是例如: 然后假设您与命令提示符在同一目录中,然后这样调用它: 对于其他读者来说,OP的 功能可以被称为任何东西,这并

  • 我在Windows中有。我正在尝试运行,但它给了我错误。 意图:我想使用解析JSON。

  • 问题内容: 我有一个方法,它在我的viewController中具有自定义序列,如下所示: 我在GameScene.swift中这样调用方法: 我仔细检查了segue名称,它是正确的。每当我在GameScene.swift文件中调用此命令时,我都会收到SIGABRT消息,但我不知道为什么。我尝试仅使用println()消息调用该函数,并且该函数有效。 对于为什么发生这种情况以及如何成功调用Game