2

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

这是我的问题

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

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

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

这是我的应用程序设置

initialViewController一个UINavigationController,指向另一个ViewController。在这里,我检查用户是否已登录 Facebook,并且 user_id 是否存储在NSUserDefaults. 如果是,我将他们定向到SWRevealViewController. 如果不是,我将它们定向到LoginViewController(我使用performSegueWithIdentifier:)。在LoginViewController用户成功登录 Facebook 和我的服务器后,我将他们定向到相同的SWRevealViewController.

基本上,SWRevealViewController分为两部分:Asw_front和 a sw_rear(菜单)。每一个都需要他们自己的UINavigationController(据我所知,没有它我就无法工作)。

从这里开始,该应用程序分成几个不同的ViewControllers.

您可以在此图像中看到故事板:( 图 1 此处链接到完整分辨率图像) (注销按钮是顶部的蓝色按钮,登录按钮是开始时的蓝色按钮)

这是我尝试过的:

上次我问了一个类似的问题时,我选择了一个解决方案,我在用户注销时展示InitialNavigationController使用该功能。presentViewController这似乎工作正常,并且ViewController呈现了modally其他应用程序似乎也可以执行的新功能(请参阅linkedIn 等)。

但是,当我再次登录时,FacebookshowLoggedInUser方法似乎被调用了两次(我NSLog()在那里放置了一个语句)。当我重复第三次时,它运行了三次。第四次登录,四次,以此类推。

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

我想要的是:

据我了解,我一直将其InitialViewController作为模式视图添加到堆栈中,这不是我想要的。我只是想回到起点。或任何对此事有用的东西。只要我有一个简单的登录/注销系统,我就会很高兴。请记住,如果用户似乎已注销(如果他从 Facebook 注销、Facebook 事件超时NSUserDefaults或某些原因重置(例如在更新下))。

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

我一直在考虑的是添加一个单独的LoginView未连接到任何东西,每当我看到用户已注销时,我都可以模态加载。每当登录完成时,我只需关闭视图,用户就会返回到他上次所在的位置。

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

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

你有什么建议?

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


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

非常感谢您!

4

0 回答 0