当用户注销/未登录时,直接指向适当的ViewController

时间:2014-04-09 08:01:13

标签: ios objective-c facebook-login logout swrevealviewcontroller

我在一段时间后发布了一个类似的问题,但事实证明我选择的解决方案不是可持续的,也不是一个好的解决方案。所以我再试一次,采用不同的方法。

这是我的问题

我正在创建一个使用Facebook登录连接到服务器的应用程序。因此,在任何给定时间,用户必须使用Facebook登录,并且user_id需要存储在NSUserDefaults中。如果在应用程序中的任何时候,两者中的任何一个都不存在,我需要将用户引导到登录屏幕。

以同样的方式,如果用户手动按下注销,我需要将他/她引导到同一个屏幕。

看到我正在使用SWRevealViewController,我需要多个UINavigationController。因此popViewController不起作用。

这是我的应用设置

initialViewControllerUINavigationController,指向另一个ViewController。在这里,我检查用户是否登录到Facebook并且user_id是否存储在NSUserDefaults中。如果是,我将他们引导到SWRevealViewController。如果不是,我将其引导至LoginViewController(我使用performSegueWithIdentifier:)。从LoginViewController开始,在用户成功登录Facebook和我的服务器之后,我将它们引导到相同的SWRevealViewController

基本上,SWRevealViewController分为两部分:A sw_frontsw_rear(菜单)。每个都需要他们自己的UINavigationController(据我所知,我没有让它工作没有。)

从此开始,该应用分为几个不同的ViewControllers

您可以在此图片中查看故事板: Image 1 (Link to full-res image here) (注销按钮是顶部的蓝色按钮,登录是开始时的蓝色按钮)

以下是我尝试过的内容:

上次我问过类似的问题时,我选择使用解决方案,当用户退出时,我使用InitialNavigationController函数显示presentViewController。这似乎工作得很好,新的ViewController呈现modally,其他应用程序似乎也是如此(请参阅linkedIn和更多)。

然而,当我再次登录时,Facebook showLoggedInUser方法似乎被调用两次(我在其中放置了NSLog()语句)。当我第三次重复时,它跑了三次。第四次登录,四次,依此类推。

此外,在第二次注销时,我会在编译器中收到警告 Warning: Attempt to present <UINavigationController: 0x13c566730> on <UINavigationController: 0x13c549c70> whose view is not in the window hierarchy! 。当我重复登录注销过程时,此警告也会继续递增。

我想要的是什么:

据我所知,我一直将InitialViewController添加到堆栈作为模态视图,这不是我想要的。我只想回到起点。或任何适用于此事的东西。只要我有一个简单的登录/注销系统,我会很高兴。请记住,如果用户似乎已注销,则我们需要能够调用应该从应用中的任何视图显示的视图(如果他从Facebook注销,如果Facebook的事情超时,或者{ {1}}由于某种原因重置(例如在更新下))。

如果可能的话,我想知道其他应用程序是如何实现这一目标的(例如linkedIn,Facebook,Twitter或其他任何人)。

我一直在想的是添加一个单独的NSUserDefaults没有连接到任何东西,每当我看到用户注销时我就可以加载模态。每当登录完成时,我只是关闭视图,用户返回到他最后的位置。

我看到的唯一问题是,当用户退出时,他在技术上仍然在应用程序“内部”,但他无法在不登录的情况下解除模态视图控制器。

这对我的问题是一个可以忍受的解决方案吗?

你有什么建议?

首选显示如何呈现新视图/返回(或任何其他解决方案)的一些物理代码,但欢迎任何帮助!


我知道这是一个很长的问题,而且可能有很多答案,但我一直坚持这个问题,我只想要一个适用于我的设置的解决方案。所以我觉得有必要解释一切。如果有什么是你没有得到的,请不要犹豫!

提前非常感谢你!

0 个答案:

没有答案