【发布时间】:2017-04-22 23:54:26
【问题描述】:
我需要在 AppDelegate 的 ViewController 类中调用一个方法。该方法如下所示:
class ViewController: UIViewController {
func myFunction() {
...
}
}
我尝试过使用 window.rootViewController,但它告诉我方法 myFunction 不存在,因为 rootViewController 的类型是 UIViewController。
我也试过
var vc = ViewController()
self.vc.myFunction()
但这正在创建 ViewController 类的新实例,这也不是我想要的。
这是我需要调用 myFunction 的 AppDelegate 代码部分:
class AppDelegate: UIResponder, UIApplicationDelegate {
func handleEvent() {
if UIApplication.shared.applicationState == .active {
// call myFunction()
}
else {
...
}
}
}
上下文: 我正在关注地理围栏教程:https://www.raywenderlich.com/136165/core-location-geofencing-tutorial
由于即使关闭应用程序也会监视用户位置,因此当触发事件时,应使用 AppDelegate 处理事件,因为尚未加载视图控制器。
在我处理事件的 AppDelegate 中,如果应用程序处于活动状态,我想弹出一个警报让用户选择停止监视位置。停止位置监控的函数(myFunction)在视图控制器中。
【问题讨论】:
-
尝试从应用程序委托调用视图控制器中的任何内容是一个糟糕的设计。你想达到什么目的?并显示相关的应用委托代码。
-
正如 rmaddy 指出的那样,您不应该在尚未完全组装好的视图控制器上调用方法(它尚未显示)。但是,您可以设置属性。所以告诉我们为什么需要在视图控制器中调用一个甚至还不存在的函数。
-
编辑了我的帖子。