如何从viewController
调用在AppDelegate
中的applicationDidEnterBackground
方法?
我想在不按Home键的情况下在应用程序的后台运行一个函数。
如何从viewController
调用在AppDelegate
中的applicationDidEnterBackground
方法?
我想在不按Home键的情况下在应用程序的后台运行一个函数。
您不应该从任何地方调用该函数。它存在的目的是让您知道应用程序何时进入后台。
如果您只想知道应用何时进入后台,那么您可以创建一个通知来帮助您实现:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(handleEnteredBackground:)
name: UIApplicationDidEnterBackgroundNotification
object: nil];
Swift 4
当应用进入后台时,如果你想在视图控制器中运行某些东西(通常是保存一些用户数据),可以使用以下方法:
override func viewDidLoad() {
super.viewDidLoad()
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) { (notification) in
print("app did enter background")
// run your code here (or whatever)
}
// ...
}
Swift 4
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) { (notification) in
}
这是另一种方式,它也可以在后台运行。 通常情况下,您需要在viewController.m的init方法(或其他适当的位置)中首先注册通知:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(someMethod:)
name: @"NotificationNameHere"
object: nil];
- (void)applicationDidEnterBackground:(UIApplication *)application
{
[[NSNotificationCenter defaultCenter] postNotification: @"NotificationNameHere"];
}
你应该在viewDidLoad方法中注册一个通知。
如果已经注册了'UIApplicationDidBecomeActiveNotification',它将自动通知你的应用程序和给定的控制器。
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(yourMethod)
name:UIApplicationDidBecomeActiveNotification
object:nil];
在你的 ViewController 中
#import "AppDelegate.h"
@property AppDelegate *appDelegate;
在你的viewDidLoad方法中
appDelegate=[[UIApplication sharedApplication] delegate];
调用AppDelegate中的函数
[appDelegate applicationDidEnterBackground:[UIApplication sharedApplication]];
这是一个委托方法。您不应手动调用此方法。如果您想调用在此方法中返回的代码,则应创建一个函数并将代码移动到该函数中。然后,您应该调用此函数。
在你的ViewController中
@property AppDelegate *appDelegate; 在你的viewDidLoad中
_appDelegate=[[UIApplication sharedApplication] delegate]; 调用来自AppDelegate的函数
[_appDelegate applicationDidEnterBackground:[UIApplication sharedApplication]];
[[UIApplication sharedApplication].delegate applicationDidEnterBackground: [UIApplication sharedApplication]]