如何从 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 的属性?

从 ViewController 访问视图

如何从它的项目 ViewControllers 访问 UITabBarController 的变量