2013-02-27 45 views
0

我一直在苦苦挣扎,所以最后我放弃了试图找到答案并决定立即提问。如何在Xcode上管理登录和注销过程

在我的应用程序中,我有一个用户登录页面。该应用程序有一个TabBarViewController,其中有一些NavigationControllers的项目。

我最后的努力是将登录屏幕嵌入NavigationBarController并使其成为初始视图控制器,如下图所示。

enter image description here

当应用程序启动时,如果用户登录的LogInViewController“塞格斯”的TabBarController,一切都很好。当用户在ProfileViewController中注销时,这个ViewController中的一个segue会被初始化为视图控制器。

另一方面,如果没有用户登录,LogInViewController将显示一个视图,以便用户可以插入用户名和密码。如果凭证是正确的,则LogInViewController'继续'到TabBarController。问题是,在这一点上,即使该应用程序仍然工作良好,我得到以下警告:

警告:试图提出TabBarViewController:0xa19a670上的UINavigationController:0xa526370而演示正在进行!

所以我认为这不是处理所有这个LogIn/LogOut过程的最好方法。

我的问题是,我应该在哪里把LogInScreen放在层次结构中? 如果有任何机会,我的布局/层次是正确的,如何使警告消失?

+0

我已经使用了这个系统几次,它运行良好。我的'rootViewController'是'UINavigationController'(酒吧隐藏)。我的初始视图控制器的图像与我的加载图像相同(用户看不到变化)。当它加载时,它会检查用户是否登录,然后用交叉淡入淡出动画对登录屏幕或登录屏幕执行'segue'(push)。 “注销”功能弹出到导航控制器的根目录,淡入登录页面(登录页面看起来像加载图像,但登录内容被覆盖)。你的问题听起来像是实施问题。 – DBD 2013-02-27 16:15:37

回答

1

你应该让你的主屏幕为您rootViewController,并在一旦你的应用程序启动或变得活跃,你可以检查用户登录或没有,如果没有则呈现LoginScreen模态,它会避免与其他NavigationController的烂​​摊子或TabBarController

或者可以将所有ViewControllers置于MutbaleArray并根据要显示的视图设置当前索引TabBarController?如果您不想在用户登录后显示登录屏幕,只需从MutableArray中删除它,查看我的回答here,它可能会帮助您的原因

+0

通过主屏幕你的意思是TabBarViewController的权利? 问题是,如果我在AppDelegate中提供LogInScreen,当用户注销时如何返回到它? – Joaocdn 2013-02-27 15:02:25

+0

是的,无论你在用户登录后显示的是什么,我的意思是 – nsgulliver 2013-02-27 15:04:04

+0

你可以使用ApplicationDidBecomeActiveNotification,你不必去AppDelegate那么只需注册你的控制器到这个通知并完成你的任务 – nsgulliver 2013-02-27 15:05:13