popToViewController 不工作

Posted

技术标签:

【中文标题】popToViewController 不工作【英文标题】:popToViewController not working 【发布时间】:2013-10-03 18:27:57 【问题描述】:

我正在调用UINavigationControllerpopToViewController 选择器,但它没有任何效果。应用程序不会崩溃或冻结,当前视图控制器上的所有触摸元素都保持原样。

请参阅下面的屏幕截图。除了没有任何反应之外,我在执行或控制台中没有发现明显的错误。

我考虑过的事情:

我在主线程上吗?是的,我已经确保了这一点 performSelectorOnMainThread 在我的屏幕截图顶部拨打电话。 是 所需的视图控制器已经推送?是的,你可以看到这是 在屏幕截图的调试面板中为 true。 mLoginViewController 在那里。 在我尝试 popTo 之前,我是否处于显示的模态视图控制器中?不,这是在什么都没有呈现的阶段发生的。 我在不同地方发出的警报是问题的一部分吗?很可能——也许他们导致当前的视图控制器没有显示完?

请注意,在执行的这一点上,有时第 263-270 行的代码刚刚运行,这会清除根导航控制器的 viewControllers 数组。这意味着屏幕上当前显示的视图控制器甚至不再在数组中。那会弄乱popTo吗?

类似问题:

海报不明白popToViewController和popViewController的区别:iphone, ipad Navigationcontroller popToViewController not functioning poster 只是询问如何在一般情况下 popTo,没有遇到任何问题:back to a particular view from any view in ios 海报收到错误信息,目标视图控制器可能不存在:popToViewController is not working "Tried to pop to a view controller that doesn't exist"

我正在运行 XCode 5.0 (5A1413),在装有 iOS 7.2 的 iPhone 5 上编译和运行。

【问题讨论】:

【参考方案1】:

你能试试这个吗?

 [self.mRootController popToRootViewControllerAnimated:NO];

自我符号很重要。 :)

【讨论】:

【参考方案2】:

检查popToViewController:animated: 方法的返回结果 - 这将返回一个视图控制器数组,导航控制器从堆栈中弹出以到达您的视图控制器。如果它为 nil,则意味着它没有找到它正在寻找的控制器。如果它包含正确的结果,则表明导航控制器认为它正在执行您要求的操作并且问题出在其他地方。

您的CXLoginViewController 中是否有响应viewWillAppear:/viewDidAppear: 并更改导航堆栈的代码?您的自定义导航控制器中是否有某些内容可能未正确实现 popToViewController:animated: 方法(过去曾发生在我身上)?

如果您所指的警报是第 235 行的警报,就在 performSelectorOnMainThread: 调用之后,则可能会导致一些问题。 performSelectorOnMainThread 将该方法(由选择器表示)排入队列以由运行循环调用。调用后立即弄乱用户界面可能会出现问题 - 您是否尝试过取消该警报?

【讨论】:

我同意。如果警报确实是问题,您可以实现另一种方法来采用完成处理程序来显示错误消息,并在完成时弹出登录控制器(用户点击确定)。您不必更改现有方法,只需调用新方法完成:nil 并将实现移到那里。

以上是关于popToViewController 不工作的主要内容,如果未能解决你的问题,请参考以下文章

斯威夫特 3:popToViewController 不工作

navigationController popToViewController 不能在 swift 3 中工作

applicationDidEnterBackground 触发 popToViewController

popToViewController 生命周期

调用 popToViewController 的正确方法 - iOS

使用 poptoviewcontroller 弹出不同的视图控制器