2

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

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

我考虑过的事情:

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

XCode 的屏幕截图显示在尝试 popTo 之前执行已停止

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

类似的问题:

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

4

2 回答 2

1

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

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

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

于 2013-10-03T19:10:05.303 回答
1

你能试试这个吗?

 [self.mRootController popToRootViewControllerAnimated:NO];

自我符号很重要。:)

于 2013-10-03T18:59:39.560 回答