我一直在关注一个视频教程,该教程教我如何以编程方式创建没有故事板的iOS应用程序。
一切顺利,我喜欢它的大部分内容,但是我有一个小问题。
我只有一半的时间,我注意到了内存的一个潜在问题,教程向我展示的方式是,对于每个下一个视图我都这样说:
let ChooseCategoryController = ChooseCategoryViewController()
present(ChooseCategoryController, animated: true, completion: nil)
然后我从那里看到另一个。回过头来,我也提出了另一种看法。我注意到在运行应用程序时内存使用率正在上升。
有没有办法,当我提出一个新视图时,我可以检测出哪些视图是打开的并关闭所有其他视图?
我认为可能在完成部分有些东西,但我正在努力,因为我很新。
提前致谢。
尝试下面的解决方案并添加自我。当xcode问我,我有这个代码:
dismiss(animated: false, completion: {
self.present(DisplayQuestionsViewController(), animated: true, completion: nil)
})
我收到了这个警告:
警告:尝试出示< triviaGameApp.DisplayQuestionsViewController:0x7fb39481ce00> on< triviaGameApp.ChooseCategoryViewController:0x7fb392e019f0>其视图不在窗口层次结构中!
如果相关。单击ChooseCategoryViewController()
上的UICollectionView单元格时会触发此代码我现在已将代码更改为以下内容:
dismiss(animated: false, completion: {
self.parent?.present(DisplayQuestionsViewController(), animated: true, completion: nil)
})
如下面的海报所述。当前视图控制器现在解除但它不会加载新的。
答案 0 :(得分:3)
您可以,但是您必须遍历viewControllers
中的所有windows
并将其删除。我会说它很危险,真的不推荐。
相反,我想建议一下。您dismiss
旧控制器,同时present
新控制器。
dismiss(animated: false, completion: {
self.parent?.present(MyOtherViewController(), animated: true, completion: nil
})
以上代码使用completion
块来确保在当前ViewController
被解除时,在这种情况下立即present
下一个MyOtherViewController
。