我开发了一个iOS应用程序,我的初始视图控制器显示了一个登录表单。然后,当用户成功验证时,实际应用程序将显示为模态视图控制器。
当用户注销应用程序时,它将被解除,登录视图控制器再次可见。
我的问题是: 当应用程序再次启动并且用户已经登录时,我不想显示登录视图控制器。在完全显示登录视图控制器之前,我无法显示视图控制器:
Warning: Attempt to present <UITabBarController: 0x10a271b40> on <LoginViewController: 0x10a2594f0> whose view is not in the window hierarchy!
我可以延迟提出,但这不是我想要的。
我可以在显示视图(在app delegate中)之前检查用户是否已登录,然后显示登录或应用程序。这个问题是: 当用户注销时,我的应用程序下面没有可以弹出的登录视图控制器。
除了将实际应用程序定义为root并在其上显示登录之外,我找不到一个好的解决方案。但这会带来很多新问题,因为主应用程序需要数据结构,我只能在登录后初始化。
答案 0 :(得分:3)
您不希望一直运行模式,很容易无意中忽略您的“整个应用”。
相反,按照您在app委托中建议您在哪里决定需要哪个视图控制器并更改窗口的根视图控制器。同样,当用户登录/注销时,更改Windows根视图控制器。
答案 1 :(得分:2)
大多数应用程序流程都是这样的。
1)将您的tabbar controller
设置为rootviewcontroller。启动应用程序时,请检查登录状态并显示标签栏(rootviewcontroller
),如果已经logged in
。否则,从tabbar呈现模式视图作为loginview控制器(tabbar是rootviewcontroller)。
2)当注销成功时,再次显示loginView as modal view
(tabbar是rootviewcontroller)。
注意:您还可以将rootviewcontroller转换为tabbar和loginview。但我推荐以上流程。