5

我在我的应用程序中使用 SWRevealViewController(以获取滑出侧面板),但是每当用户导航到另一个 viewController(如“设置”)并返回时,一切都会重置。我知道这是故事板的正常行为,因为每次都会实例化一个新的 VC 并调用 viewDidLoad。我试图通过将 VC 存储在 AppDelegate 中的数组中然后返回到原始 viewController 来解决这个问题,这阻止了 viewDidLoad 在最初重新呈现原始 VC 时被调用,但我仍然发现它在移动时被随机调用veiwcontroller 的,重置我的所有属性等。在研究时,Apple 文档确实说不要假设 viewDidLoad 只会被调用一次。

在切换选项卡时,这种行为在 UITabBarController 中是否明显,因为我正在考虑放弃 SWRevealViewController 并使用它来代替它,如果它不那么令人头疼的话。

我应该以不同的方式处理这个问题,即。在 NSUserDefaults 中存储“状态”并在 viewDidLoad 上恢复?

提前致谢。

4

2 回答 2

8

viewDidLoadUIViewController仅在第一次加载到内存时调用一次。这是您想要实例化任何实例变量并构建UIViews在 this 的整个生命周期中存在的任何实例变量的地方UIViewController

当您切换选项卡时,也会调用一次UITabBarControllerviewdidLoadUIViewController

于 2013-10-10T09:47:28.587 回答
2

viewDidLoad()方法只调用一次。它是循环的一个组成部分。

它被调用,然后相应的UIViewController类被加载到内存中。

是的,如果你想初始化任何属性或访问和修改NSUserDefaults,它可以而且应该在viewDidLoad方法中完成。

至于您的应用,每当用户在不同的目的地之间切换时,都会为每个目的地调用UIViewControllers该方法。viewDidLoadUIViewController

此外,正如正确指出的那样,它也会在内存警告的情况下被调用。

于 2013-10-10T09:53:04.727 回答