【问题标题】:Calling a method when the application is called from background从后台调用应用程序时调用方法
【发布时间】:2012-01-26 16:30:18
【问题描述】:

在 Foursquare 等应用程序中,当我单击主页按钮时,应用程序会进入后台。然后当我点击它的图标时,它会在屏幕上加载回内容。

当我将我的应用程序发送到后台然后我将其召回时,它不会将内容加载回屏幕。我在viewDidAppear 方法中输入了我的代码,但它没有被执行。

当应用程序内容变为活动状态时如何加载它?

【问题讨论】:

标签: objective-c ios background uiapplicationdelegate


【解决方案1】:

您需要回复- (void)applicationDidBecomeActive:(UIApplication *)application- (void)applicationWillEnterForeground:(UIApplication *)application 或等效的UIApplication 通知。像viewDidAppear 这样的UIViewController 生命周期调用不会由应用生命周期转换触发。

【讨论】:

  • 这已经在我的 AppDelegate 中了。因此,只需在此处添加代码即可。谢谢。
【解决方案2】:

smparkes 的建议是正确的。您可以注册UIApplicationDidBecomeActiveNotificationUIApplicationWillEnterForegroundNotification。在调用这些方法(smparkes 编写的方法)之后调用这些通知。在此通知的处理程序中执行您想要的操作。例如在viewDidLoad 中为您的控制器注册以下通知:

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(doUpdate:)
                                             name:UIApplicationDidBecomeActiveNotification object:nil];

不要忘记删除dealloc

[[NSNotificationCenter defaultCenter] removeObserver:self];

最后,doUpdate 方法可能如下

-(void)doUpdate:(NSNotification*)note
{
    // do your stuff here...
}

我建议你阅读UIApplicationDelegate class reference。尤其要阅读监控应用程序状态变化

希望对你有帮助。

【讨论】:

  • 我正在使用 ARC,所以我还需要解除分配吗?为什么?
  • 你应该。有关更多信息,请阅读此stackoverflow topic。在另一个stackoverflow topic 中,解释了为什么应该删除它。希望对您有所帮助。
【解决方案3】:

假设您想收听 UIApplicationDidBecomeActiveNotification,这里有可能对您有所帮助的 ObjC 代码。

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification
object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note) {

    // custom code goes here.
}];

【讨论】:

    猜你喜欢
    • 2014-07-07
    • 2011-04-08
    • 2017-01-26
    • 2019-02-06
    • 1970-01-01
    • 2020-01-25
    • 2017-11-20
    • 2013-03-29
    • 1970-01-01
    相关资源
    最近更新 更多