好的,所以我正在构建一个带有初始登录视图(名为 LoginVC 的视图控制器)的通用 iOS 应用程序,只是一个简单的 UIViewController。如果登录成功,应用程序将转到导航控制器 (MainNavigationVC)。我通过 XCode 的故事板 gui 创建了这个 segue,因此没有完成导航控制器的编程创建。导航控制器以全屏模式呈现,因此应用程序的其余部分在登录视图上运行,此导航控制器是一切的核心。
导航控制器包含一个视图(带有一个名为 UserStartPageVC 的视图控制器),在其导航栏中是一个注销按钮。此按钮向 UserStartPageVC 发送一个目标操作,目的是关闭导航控制器,从而将用户带回登录视图。
到目前为止一切正常。我可以按预期登录并使用该应用程序。但!当我注销然后重新登录时,XCode 告诉我:
警告!在演示过程中尝试在 <LoginVC: 0x756fcf0> 上演示 <MainNavigationVC: 0x753110>!
我想这意味着登录视图正在尝试以模态方式显示 MainNavigationVC 导航控制器,但已经显示了另一个,对吧?但是怎么做?可以不显示就呈现视图吗?
注销时如何摆脱旧的导航控制器?我尝试了几种关闭模式视图的方法,例如:
从 UserStartpageVC 中运行
[x dismissViewControllerAnimated:YES 完成:NULL]
[xdismissModalViewControllerAnimated:YES]
其中 x 是 self、self.parentViewController 或 self.presentingViewController。
将 LoginVC 设置为 UserStartpageVC 中的属性并运行
[self.loginVCdismissViewControllerAnimated:YES 完成:NULL]
等等。
所有经过测试的调用实际上都让我回到了登录屏幕,所以它有点工作。
有任何想法吗?如有必要,可以提供相关的代码示例,我只是无法弄清楚哪些部分是感兴趣的。导航控制器的 seguing 没有代码(performSegueWithIdentifier:sender: 除外),而解除它的代码是我似乎无法理解的部分。
作为旁注。到目前为止,这不是一个真正的问题。该应用程序运行,并且除了 XCode 中的错误消息之外,可以注销并重新登录而不会产生任何其他副作用。但我想如果用户多次注销和登录,这将是内存泄漏,而且我不想被 Apple 不必要地拒绝。