我将应用程序中的导航从使用 UITabBarController 更改为 u UINavigationController。即以前的解决方案(第 1 版)仅基于 TabBarController - 4 个 ViewControllers(一个简单的 TableView、一个简单的自定义视图和一个带有许多叠加层的 MapView)。第二个版本仅基于 UINavigationController。
在 TabBarController 的情况下,它清晰简单,一切正常,尤其是 MapView。我的意思是:MapView 被加载一次(有大量的叠加层),当我转到另一个视图并返回 MapView 时,MapView 仍然在那里,它的叠加层已经加载并显示(简单检查:调用 MapView 的 viewDidLoad每个应用程序运行一次,我在那里有一些调试消息)。
现在我将导航逻辑更改为 UINavigationController。第一眼一切都很好 - 但是:每次我导航到视图时都会调用 viewDidLoad (对于每个视图)。这很烦人,尤其是在 MapView 的情况下 - 每次都会执行叠加层的加载,这需要一些时间,并且在某些情况下会导致应用程序崩溃。
好的,我的问题:
它是 NavigationController 的某种“常见”行为吗?
我可以更改此行为,以便仅调用一次 viewDidLoad 吗?
还有更多 - 如何影响某些视图的“显示顺序”?
我理解逻辑可能更复杂,但我很感激任何答案或提示;)
一些相关情况:
- TabBar 和 Navigation 控制器未组合。
- 我使用故事板,在 UIB 中设计了 segue,在我的代码中没有像 perfomSegue 或 prepareForSegue 这样的手动调用。一键触发到 MapView 的 segue。
- 我使用 push segues。
- 我也尝试使用模态序列,但没有改变这种行为。
- 在视图之间的 segues 中永远不会调用任何 viewDidUnload。
- 未收到内存警告。
- 在模拟器和 iPhone 4 上都没有测量到内存泄漏。
- 我试图构建一个非常简单的临时项目/应用程序,它只关心导航。没有任何编码的控制器和其他视图,只是故事板。这是同样的行为。
- 当我在一个视图和 MapView 之间快速并定期点击导航按钮和后退按钮时,出现了一个导致应用程序崩溃的问题。在大多数情况下,当我在 MapView 完全显示(即其覆盖)之前点击返回按钮时,应用程序崩溃了。当我添加 1 秒时,它已修复。在 MapView 中 viewDidDisappeared 中的延迟方法调用。我知道,这不是一个公平的解决方案;)