如何从 viewController 访问 applicationDidEnterBackground
Posted
技术标签:
【中文标题】如何从 viewController 访问 applicationDidEnterBackground【英文标题】:How to access applicationDidEnterBackground from viewController 【发布时间】:2014-07-10 11:56:04 【问题描述】:如何从viewController
中调用AppDelegate
中的applicationDidEnterBackground
?
我想在应用程序的后台运行一个功能而不按主页按钮。
【问题讨论】:
【参考方案1】:您不应该从任何地方调用该函数。它会在应用程序进入后台时通知您。
您只是想知道应用何时进入后台?如果是这样,那么您可以创建一个通知来帮助您:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(handleEnteredBackground:)
name: UIApplicationDidEnterBackgroundNotification
object: nil];
【讨论】:
我想在应用程序的后台运行一个功能而不按主页按钮 那你需要了解一下后台任务:developer.apple.com/library/ios/documentation/iphone/conceptual/… @joelg 你什么时候退订通知?您是否删除了 didTerminate 中的所有订阅者? 未声明的选择器 'handleEnteredBackground:' 警告我应该如何以及在哪里声明你会更新你的问题吗【参考方案2】:斯威夫特 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)
// ...
【讨论】:
这对我来说很好用,这正是我在代码中寻找的解决方案,当隐藏时将应用程序置于后台时,标签栏会进一步跳入屏幕。我只是放置了一个函数链接,以便在关闭应用程序时重新出现选项卡栏,然后对所有内容进行排序。【参考方案3】:斯威夫特 4
NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) (notification) in
【讨论】:
【参考方案4】:这是一个委托方法。您不应手动调用此方法。如果要调用此方法中的代码返回。您应该创建一个函数并将代码移到那里。那么你应该调用这个函数。
【讨论】:
我想在应用程序的后台运行一个功能而不按主页按钮 使用 performselectorinbackground 方法【参考方案5】:这是另一种方式,它也会在后台运行 通常,您首先在 viewController.m init 方法(或其他适当的地方)中注册通知:
[[NSNotificationCenter defaultCenter] addObserver: self
selector: @selector(someMethod:)
name: @"NotificationNameHere"
object: nil];
在您的 App Delegate 中,触发通知:
- (void)applicationDidEnterBackground:(UIApplication *)application
[[NSNotificationCenter defaultCenter] postNotification: @"NotificationNameHere"];
【讨论】:
【参考方案6】:你应该在它的 viewDidLaod 方法中注册一个通知。
'UIApplicationDidBecomeActiveNotification' 将自动通知您的应用程序和给定的控制器(如果它们已注册)。
[[NSNotificationCenter defaultCenter]addObserver:self
selector:@selector(yourMethod)
name:UIApplicationDidBecomeActiveNotification
object:nil];
【讨论】:
【参考方案7】:在您的视图控制器中
#import "AppDelegate.h"
@property AppDelegate *appDelegate;
在你看来DidLoad
appDelegate=[[UIApplication sharedApplication] delegate];
从 AppDelegate 调用函数
[appDelegate applicationDidEnterBackground:[UIApplication sharedApplication]];
【讨论】:
【参考方案8】:在您的视图控制器中
导入“AppDelegate.h”
@property AppDelegate *appDelegate; 在你看来DidLoad
_appDelegate=[[UIApplication sharedApplication] 委托]; 从 AppDelegate 调用函数
[_appDelegate applicationDidEnterBackground:[UIApplication sharedApplication]];
【讨论】:
您可以将代码块用于代码。它看起来和读起来更好。 :)【参考方案9】:[[UIApplication sharedApplication].delegate applicationDidEnterBackground: [UIApplication sharedApplication]]
【讨论】:
这一行出错。 (选择器 applicationDidEnterBackground 没有已知的实例方法) 对不起,我忘记了参数以上是关于如何从 viewController 访问 applicationDidEnterBackground的主要内容,如果未能解决你的问题,请参考以下文章
如何从 appDelegate 访问每个 ViewController?
如何从 XIB 文件访问 ViewController 中的 IBoutlet
如何从另一个 viewController 访问 tabBar 单击
如果它在 TabBarController 中,如何从 AppDelegate 访问 ViewController 的属性?