当 Reachability 发生变化时连续关闭 ViewController

Posted

技术标签:

【中文标题】当 Reachability 发生变化时连续关闭 ViewController【英文标题】:Dismissing ViewControllers in succession when Reachability changes 【发布时间】:2012-09-17 22:51:23 【问题描述】:

我正在编写一个游戏,用户只有在互联网连接有效的情况下才能玩。如果互联网状态发生变化,我想关闭所有 ViewController 并返回登录屏幕。这是层次结构:

我的 App Delegate 通过以下方式显示 LoginViewController:

self.window.rootViewController = loginViewController;
[self.window makeKeyAndVisible];

用户在这里登录。登录时,我检查连接并处理错误。如果登录成功,loginViewController 使用 mainViewController 显示

[self presentModalViewController:self.mainViewController animated:YES];

然后mainViewController呈现其他控制器,可以呈现其他控制器等等。当前和关闭例程工作正常。

现在,如果可达性状态发生变化,我想显示警报并强制应用返回登录屏幕。我知道如何收听这些通知并采取适当的行动。这是有据可查的:)

如何关闭所有视图控制器,直到我回到登录屏幕?我是否需要在所有视图控制器中收听通知并分别关闭它们?有没有办法在父级(如应用程序委托)中捕获通知并从那里关闭所有视图控制器(而不事先持有对所有视图控制器的引用)?

显然,我没有使用 navigationController 所以

[self.navigationController popToRootViewControllerAnimated:NO];

不可能。

编辑:或者,我可以关闭并释放所有内容并从头开始,就像重新启动应用程序一样。这是更好的方法吗?我该怎么做?

谢谢。

【问题讨论】:

【参考方案1】:

好的,我解决了。只需调用

[self dismissModalViewControllerAnimated:NO];

在 loginViewController 上关闭主视图控制器和堆栈上的所有控制器。

【讨论】:

通知是在实际上应该触发的时候不触发,还是在不应该触发的时候不必要地触发?对我来说,前者仍然可以管理,但后者会破坏应用体验。 both..Id 进入细节,但它往往会引起认为它有效的人的激烈战争,它没有,搜索所以有很多关于可达性的讨论。 已弃用...改用[self dismissViewControllerAnimated:NO completion:nil];

以上是关于当 Reachability 发生变化时连续关闭 ViewController的主要内容,如果未能解决你的问题,请参考以下文章

使用Reachability实时监测网络连通性

当蓝牙连接状态发生变化时,防止onDestroy

通知用户可达性(Ashley Mills 的可达性)

为啥调用 location.reload(); 后我的表中的行顺序会发生变化?关闭模态框时

Tk控件中的变量

UIAlertView 自动关闭后导航栏色调颜色发生变化