Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 完全移除视图控制器-Swift_Ios_Swift_Uiviewcontroller - Fatal编程技术网

Ios 完全移除视图控制器-Swift

Ios 完全移除视图控制器-Swift,ios,swift,uiviewcontroller,Ios,Swift,Uiviewcontroller,我创建了一个小游戏(不是用精灵套件),我有一个MenuViewController和一个GameViewController 在我的GameViewController上,我有一个“菜单”按钮可以转到菜单。我在GameViewController中输入了以下代码: print("test") 它使用计时器每秒钟执行一次 当我按下“菜单”按钮时,我发现自己在菜单上,但计时器仍在运行。我认为GameViewController没有完全移除,我该怎么做 PS:要关闭GameViewControlle

我创建了一个小游戏(不是用精灵套件),我有一个MenuViewController和一个GameViewController

在我的GameViewController上,我有一个“菜单”按钮可以转到菜单。我在GameViewController中输入了以下代码:

print("test")
它使用计时器每秒钟执行一次

当我按下“菜单”按钮时,我发现自己在菜单上,但计时器仍在运行。我认为GameViewController没有完全移除,我该怎么做

PS:要关闭GameViewController,我使用以下命令:

func goToMenuViewController() {

    let menuViewController = MenuViewController()
    menuViewController.modalTransitionStyle = UIModalTransitionStyle.CrossDissolve
    self.presentViewController(menuViewController, animated: true, completion: nil)

}
编辑1

我添加了一些关于我的应用程序层次结构的信息:

当用户启动应用程序时,他发现自己进入了
菜单的ViewController
。 此ViewController上有一个play(播放)按钮,用于进入
GameViewController

菜单ViewController
上,还有一个按钮指向RulesEditorViewController,允许修改显示在
游戏视图控制器上的规则。您尝试解除
游戏视图控制器的操作是错误的。您正在创建新的
菜单
控制器,并将其显示在
游戏视图控制器
上方。这就是为什么这个控制器仍然在应用程序内存中

您必须使用此函数
self.dismissViewControllerAnimated(true,完成:nil)
self.navigationController?.poptrootviewcontrolleranimated(true)
,具体取决于您的序列类型

现在,如果你想访问
RulesEditorViewController
,你必须停止游戏并离开这个控制器。但如果您想在玩游戏时修改选项,那么最好像您现在尝试显示菜单一样,直接从
GameViewController
访问
RulesEditorViewController

更新:
首先,您应该了解视图控制器层次结构以及如何表示它的方法。我相信这篇关于故事板示例的教程将对您有所帮助:

您无法看到GameViewController是否以这种方式被删除。 如果您在GameViewController中使用计时器,它将保留对GameViewController的引用,直到停止执行为止


顺便说一下,当前菜单视图控制器不会使游戏视图控制器被删除

您可以在ViewWillEnglish或ViewDidEnglish方法中停止计时器,并根据需要在ViewWillEnglish或ViewDidEnglish方法中重新启动。这不是问题,我设置此计时器以查看GameViewController是否已完全删除。根据您提供的代码,
GameViewController
将不会删除,因为它仍然存在于您的菜单“视图控制器”下。另一个你的
GameViewController
无法解除锁定的原因是计时器。您必须手动停止它以避免内存分配。事实上,我使用的是
NSUserDefault
,在GameViewController中,会显示一些规则,在另一个ViewController中,用户可以编辑这些规则,编辑规则后,我会这样做:
NSUserDefaults.standardUserDefaults().setObject(textFieldText,forKey:“textFieldText”)
和之后:
NSUserDefaults.standardUserDefaults().synchronize()
。当我返回GameViewController时,这不是新规则,而是旧规则。我看不到你的问题和你的评论之间的联系。请提供有关视图控制器层次结构的明确信息。我使用了
self.dismissViewControllerAnimated(true,completion:nil)
,但它不起作用,当我编辑规则时,GameViewController中仍然有旧规则:(你的
GameViewController
是模态的还是嵌入导航控制器?对不起,我不明白我是iOS开发新手,你能解释一下这是什么意思吗?我不使用故事板,只使用代码。你如何展示你的
GameViewController