iOS - 如何删除应用程序窗口层次结构中的所有ViewControllers?

时间:2013-10-03 16:23:11

标签: iphone ios objective-c xamarin.ios

我的应用程序使用典型的身份验证方案,其中用户使用他的凭据登录服务器,该服务器返回一个身份验证令牌,然后将其本地存储在客户端(iPhone)上。

现在不太可能存储的身份验证令牌随着时间的推移而变得无效。由于使用该无效令牌发出的每个请求都会失败,因此我希望在第一次发生该故障时通过“将用户登出”应用程序来处理。注意:该请求可以在后台线程中进行,因为该应用正在定期与服务器同步。

退出意味着:

  1. 删除本地存储的令牌
  2. 删除用户存储的所有其他内容(在Sqlite中)
  3. 将用户“重定向”到登录控制器
  4. 因此,用户可能正在查看应用内的某些内容,而令牌无效并且注销过程已开始。

    由于所有内容都被删除(#2),仅向她提供登录控制器是不够的,因为在登录并解除该控制器之后,以前的内容实际上不再存在了。

    为了防止出现这种副作用,我想彻底删除层次结构中的所有视图控制器,无论触发注销时有多深。

    所以我的问题是:

    在呈现登录控制器之前,“杀死”所有活动控制器的最佳方法是什么?

1 个答案:

答案 0 :(得分:7)

将LoginViewController分配给窗口rootViewController。以下是文档中对rootViewController的描述。这听起来就像你想要完成的一样。

  

根视图控制器提供窗口的内容视图。将视图控制器分配给此属性(以编程方式或使用Interface Builder)将视图控制器的视图安装为窗口的内容视图。如果窗口具有现有视图层次结构,则在安装新视图之前将删除旧视图。