我有一个带有这样的情节提要的应用程序:
标记为 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 参考之外从哪里开始)和谷歌搜索的结果.
我只做这种类型的编程几个星期,所以如果这是一个愚蠢的问题,我很抱歉,我只是无法找到问题的成功解决方案,这对我来说有点障碍在这一刻。