2012-07-25 90 views
0

我正在做一个游戏,我有这样的视图控制器方案 1(菜单) - > 2(水平选择) - > 3级(与定时器等) - >在死亡或赢得4完成 - >再次2. 我在做什么 我创建了singleton类,它将所有这些视图控制器保存在数组中,并在需要时将它们设置为rootViewControllers。但我有下面的问题:当我退出3并转到4时,我将3设置为nil,但似乎3仍在工作(定时器正在控制台中打印消息)并且不会被释放。也许我不明白关于viewcontrollers的一些事情,当你将另一个设置为rootViewController时会发生什么?Objective-C切换视图控制器

+0

我认为标准做法是从NIB中加载一个视图控制器,当它被推入堆栈时 - 除非作为特殊情况,它们通常不会停留在附近...... – nielsbot 2012-07-26 00:07:39

回答

0

你真的不应该经常切换rootViewControllers。大多数情况下,您将一个控制器设置为整个应用程序的根。你应该做的是使用UINavigationController来管理你的UIViewControllers。一旦将程序嵌入UINavigationController中,您只需将其推入导航控制器的堆栈并弹出即可。看看这几个方法:

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated 

- (NSArray *)popToViewController:(UIViewController *)viewController animated:(BOOL)animated 

- (UIViewController *)popViewControllerAnimated:(BOOL)animated 

同样,您可以通过使用推赛格瑞(从故事板经常初始化(如果你使用一个))

你添加一个视图控制器堆栈可以了解更多有关UINavigationController这里:http://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

+0

非常感谢!顺便说一句,我可以弹出几个ViewControllers 1 1没有保持对他们的引用?明显的流行,弹出不起作用 – Mathemage 2012-07-26 00:34:16

+0

我不完全确定你的意思是“流行少数”,但如果你想流行到一个特定的VC,那么你只需循环UINavigationController的堆栈,然后使用' - (NSArray * )popToViewController:(UIViewController *)viewController animated:(BOOL)animated'来弹出一个你想要的。这将继续弹出堆栈,直到它达到你想要的。 – Nosrettap 2012-07-26 01:14:02

0

在你的情况,因为你有很强的借鉴意义,以您的视图控制器(数组中),它的视图将被切换出,但是控制器仍然存在,所以如果你有一个定时器从该控制器开始,它将继续运行。至于定时器,我认为你应该在#3视图控制器的viewDidDisappear方法中使其无效 - 应该处理这个问题。