3

在我的应用程序中,我稍微跳过了导航,这是我的导航功能的粗略概述

登录 -> 主屏幕 -> 设置

从设置中,我想要一个返回登录页面的注销。我这样做:

UIViewController* requireController = [[[self navigationController] viewControllers] objectAtIndex:0];
[[self navigationController] popToViewController:requireController animated:YES];

这确实让我回到了登录页面。但是,我想在主屏幕中发布一些东西,例如我有一个每 10 秒运行一次任务的计时器,它会继续运行(我可以在日志中看到它)。从 iOS6 开始,viewDidUnload 显然不再被调用。viewDidDisapear 也不太正确,因为在进入设置时也会调用它。

我应该怎么做才能摆脱主视图控制器中的一些任务?

4

3 回答 3

1

我会使用NSNotificationCenter- (void)viewDidDisappear:(BOOL)animated使用UIViewController.

于 2013-09-25T04:46:39.077 回答
1

您可以使用该popToRootViewControllerAnimated:方法直接跳转到根视图控制器,在您的情况下是登录控制器。如果您没有在代码中的任何位置保留主屏幕或设置控制器,那么移动到根视图控制器将调用dealloc从导航堆栈中删除的视图控制器上的方法。

您可以覆盖dealloc主屏幕控制器中的 并释放资源。请记住,如果您使用 ARC,请不要调用,[super dealloc]因为它会出错。但是,如果您手动管理内存,请确保在dealloc.

希望有帮助!

于 2013-09-25T07:23:00.550 回答
1

在注销视图控制器上设置协议。在您弹回主界面之前,调用一些方法来使用您创建的协议(委托)重置该视图控制器的状态。在主 VC 上实现该方法。在告诉委托人做任何事情之后,然后弹出登录 VC。

以下是此模式的基础知识。 http://iosdevelopertips.com/objective-c/the-basics-of-protocols-and-delegates.html

于 2013-09-25T02:59:13.100 回答