从后台调用应用程序时调用方法
Posted
技术标签:
【中文标题】从后台调用应用程序时调用方法【英文标题】:Calling a method when the application is called from background 【发布时间】:2012-01-26 16:30:18 【问题描述】:在 Foursquare 等应用程序中,当我单击主页按钮时,应用程序会进入后台。然后当我点击它的图标时,它会在屏幕上加载回内容。
当我将我的应用程序发送到后台然后我将其召回时,它不会将内容加载回屏幕。我在viewDidAppear
方法中输入了我的代码,但它没有被执行。
当应用程序内容变为活动状态时如何加载它?
【问题讨论】:
阅读文档:developer.apple.com/library/ios/documentation/iPhone/Conceptual/… 【参考方案1】:您需要回复- (void)applicationDidBecomeActive:(UIApplication *)application
或- (void)applicationWillEnterForeground:(UIApplication *)application
或等效的UIApplication
通知。像viewDidAppear
这样的UIViewController
生命周期调用不会由应用生命周期转换触发。
【讨论】:
这已经在我的 AppDelegate 中了。因此,只需在此处添加代码即可。谢谢。【参考方案2】:smparkes 的建议是正确的。您可以注册UIApplicationDidBecomeActiveNotification
或UIApplicationWillEnterForegroundNotification
。在调用这些方法(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,所以我还需要解除分配吗?为什么? 你应该。有关更多信息,请阅读此*** topic。在另一个*** topic 中,解释了为什么应该删除它。希望对您有所帮助。【参考方案3】:假设您想收听 UIApplicationDidBecomeActiveNotification,这里有可能对您有所帮助的 ObjC 代码。
[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification
object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification *note)
// custom code goes here.
];
【讨论】:
以上是关于从后台调用应用程序时调用方法的主要内容,如果未能解决你的问题,请参考以下文章