Objective-C切换视图控制器

时间:2012-07-25 22:38:25

标签: objective-c uiviewcontroller

我正在制作游戏,我有这样的视图控制器方案 1(菜单) - > 2(级别选择) - > 3级(有计时器等)--->死亡或赢4完成 - >再次2。 我所做的 我创建了singleton类,它将所有这些视图控制器保存在数组中,并在需要时将它们设置为rootViewControllers。但是我有以下问题:当我退出3并转到4时,我将3设置为nil,但似乎3仍在工作(计时器在控制台中打印消息)并且没有取消分配。也许我不了解viewcontrollers,当你将另一个设置为rootViewController时会发生什么?

2 个答案:

答案 0 :(得分:0)

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

- (NSArray *)popToRootViewControllerAnimated:(BOOL)animated

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

- (UIViewController *)popViewControllerAnimated:(BOOL)animated

同样,您可以使用推送segue(通常从故事板初始化(如果您使用的话))将视图控制器添加到堆栈中。

您可以在此处详细了解UINavigationControllerhttp://developer.apple.com/library/ios/#documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html

答案 1 :(得分:0)

在您的情况下,由于您对视图控制器(在数组中)有一个强引用,它的视图将被切换,但控制器仍然存在,因此如果您从该控制器启动了一个计时器,它将继续跑。至于计时器,我认为你应该在#3视图控制器的viewDidDisappear方法中使它无效 - 这应该解决问题。