objective-c - Modal UINavigationController 隐藏但不关闭

标签 objective-c ios uinavigationcontroller

好的,所以我正在构建一个带有初始登录 View (名为 LoginVC 的 View Controller )的通用 iOS 应用程序,只是一个简单的 UIViewController。如果登录成功,应用程序将转到导航 Controller (MainNavigationVC)。我通过 XCode 的 Storyboard gui 创建了这个 segue,因此没有完成导航 Controller 的编程创建。导航 Controller 以全屏方式呈现,因此应用程序的其余部分在登录 View 之上运行,此导航 Controller 是所有内容的核心。

导航 Controller 包含一个 View (带有名为 UserStartPageVC 的 View Controller ),并且在其导航栏中有一个注销按钮。此按钮向 UserStartPageVC 发送一个目标操作,目的是关闭导航 Controller ,从而使用户返回到登录 View 。

到目前为止,一切正常。我可以按预期登录并使用该应用程序。但!当我注销然后重新登录时,XCode 告诉我:

Warning! Attempt to present <MainNavigationVC: 0x753110> on <LoginVC: 0x756fcf0> while a presentation is in progress!

我想这意味着登录 View 正在尝试以模态方式显示 MainNavigationVC 导航 Controller ,但另一个已经显示,对吗?但如何呢?可以在不展示的情况下呈现 View 吗?

注销时如何摆脱旧的导航 Controller ?我尝试了几种关闭模态视图的方法,例如:

  • 从 UserStartpageVC 中运行

    [x dismissViewControllerAnimated:YES 完成:NULL]

    [x解雇ModalViewControllerAnimated:是]

其中 x 是 self、self.parentViewController 或 self.presentingViewController。

  • 将 LoginVC 设置为 UserStartpageVC 中的属性并运行

    [self.loginVC DismissViewControllerAnimated:YES 完成:NULL]

等等。

所有测试的调用实际上都会让我返回登录屏幕,所以它有点工作。

有什么想法吗?如果需要的话可以提供相关的代码示例,我只是无法弄清楚哪些部分是感兴趣的。导航 Controller 的 Seguing 没有代码(除了 PerformSegueWithIdentifier:sender:),而用于解除它的代码是我似乎无法理解的部分。

作为旁注。到目前为止这还不是一个真正的问题;应用程序运行,并且可以注销并重新登录,除了 XCode 中的错误消息之外,没有任何其他副作用。但我认为,如果用户多次注销和登录,这将是内存泄漏,而且我不想遭到 Apple 不必要的拒绝。

最佳答案

我发现了另一种方法来获取完全相同的错误消息。我很幸运!

如果您在某个时刻创建了一个 Segue 并将其绑定(bind)到一个按钮(单击按钮 -> 新 View ),然后为该 Segue 命名并使用直接调用它

[self performSegueWithIdentifier:@"identifierName" sender:self];

然后你会得到这个错误,因为你可以有效地触发segue两次。我认为让按钮调用 IBAction 会关闭我一开始设置的转场,但显然不是。点击按钮触发了segue两次,但是在我删除了segue并在具有相同标识符的 View 上将其重新创建为手动segue之后,我就能够通过上面的代码调用它并且不会收到警告消息。

关于objective-c - Modal UINavigationController 隐藏但不关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12596882/

相关文章:

ios - 默认 iOS UINavigationBar 动画不流畅

iOS 13 - 大标题中的变音符号导致内容跳跃和警告 UITableViewAlertForLayoutOutsideViewHierarchy

iOS 在 Objective-C 中登录/注销过程后更改 rootViewController

ios - 根据用户角色重用 UIViewController 子类的 Storyboard UI

objective-c - UIGestureRecognizer 检测顺序

objective-c - 让 NSTextView 完全适合它的内容

ios - 谁能确认 AR+ 可以与运行 iOS 11 的 iPad 4 mini(或类似的 iPad)配合使用吗?

iOS Facebook SDK : show progress of received data with FBURLConnection

ios - 使用 Youtube API v3 将视频上传到 Youtube 后如何获取视频链接?

ios - 我可以在计划提交给 Applestore 的代码中使用 C++ 吗? (iPhone产品)