我在我的应用程序中使用SWRevealViewController(以获取滑出侧面板)但是每当用户导航到另一个viewController(如“settings”)并返回时,一切都会重置。我知道这是故事板的正常行为,因为实例化了新VC并且每次调用viewDidLoad。我试图通过将VC存储在AppDelegate中的数组中然后返回到原始的viewController来解决这个问题,这会阻止在最初重新呈现原始VC时调用viewDidLoad,但我仍然发现它在之间移动时被随机调用veiwcontroller's,重置我的所有属性等。在研究中,Apple文档确实说不要假设viewDidLoad只会被调用一次。
当切换标签时,这种行为在UITabBarController中是否明显,因为我正在考虑放弃SWRevealViewController并使用它而不是让它不那么头痛。
我应该以不同的方式处理,即。在NSUserDefaults中存储'state'并在viewDidLoad上恢复?
提前致谢。
答案 0 :(得分:7)
viewDidLoad
首次加载到内存中时, UIViewController
只调用一次。这是您想要实例化任何实例变量并构建在UIViews
的整个生命周期中存在的任何UIViewController
的地方。
在UITabBarController
中,当您切换标签时,viewdidLoad
的{{1}}也会被调用一次。
答案 1 :(得分:2)
viewDidLoad()
方法只调用一次。它是周期中不可或缺的一部分。
调用它然后将相应的UIViewController
类加载到内存中。
是的,如果您要初始化任何属性或访问并修改NSUserDefaults
,可以而且应该使用viewDidLoad
方法完成。
对于您的应用,只要用户在不同UIViewControllers
之间切换,就会为每个目标viewDidLoad
调用UIViewController
方法。
另外,正如所指出的那样,在内存警告的情况下也会调用它。