0

我有一个带有这样的情节提要的应用程序:在此处输入图像描述

标记为 1 的场景是我的应用程序初始视图,用户在加载应用程序时看到的第一个场景。这实际上是我的登录/注册场景。

标记为 2 的场景在应用程序的深处,它嵌入在 UINavigationController 中,该控制器本身可通过 UITabBarController 访问。这个场景有一个注销按钮,它可以清除会话并且还应该将用户返回到场景#1。

返回第一个场景的正确方法是什么?我尝试了几种不同的方法,成功率为零。这是我尝试过的:

[[self navigationController] popToRootViewControllerAnimated:YES];

加载 #2 时(我相信)不会做任何事情,它实际上是当前 navigationController 的根视图控制器。

通过 segue 推送

并没有真正起作用,因为它只是将场景#1 添加到堆栈中,使用户能够“返回”到设置。我相信我可以为此隐藏导航栏,但据我所知,我不应该这样做,因为这种方法只是将视图添加到堆栈中,如果用户要重复此操作,应用程序最终将耗尽内存和崩溃。

AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; [[delegate.window rootViewController]dismissModalViewControllerAnimated:YES];

这似乎确实清除了所有内容并返回到初始视图,但是与场景的任何交互(例如点击登录或注册按钮)都会导致如下错误:

** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“应用程序试图在目标上呈现 nil 模态视图控制器。”

我非常感谢您为解决此问题提供的任何帮助。我已经在这几天了,尽可能多地阅读听起来相关的 SO 问题,尝试阅读 Apple 文档(尽管不知道在 UINavigationBarController 参考之外从哪里开始)和谷歌搜索的结果.

我只做这种类型的编程几个星期,所以如果这是一个愚蠢的问题,我很抱歉,我只是无法找到问题的成功解决方案,这对我来说有点障碍在这一刻。

4

1 回答 1

1

这有效:

- (IBAction)pop:(id)sender {

    [self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
}
于 2012-10-19T23:39:44.273 回答