7

我有一个委托/处理程序,我在我的 UIViewControllers 上实现了处理远程 Web 服务的超时。当向我的 web 服务发出请求并返回超时 http 代码时,将调用委托并执行以下操作:

UINavigationController *navController = self.navigationController;

if (navController) {
    [navController popToRootViewControllerAnimated:YES];
} else {
    NSLog(@"navController is null/nil");
}

如果我执行以下步骤,navController则正确实例化并popToRootViewController发生操作。

  1. 使用 Login ViewController 上的 web 服务对我的应用程序进行身份验证
  2. 自动触发对 CustomMenuViewController 的 segue
  3. 远程等待 web 服务超时
  4. 单击以触发对 CustomSubMenuViewController 的 segue

现在,如果我执行以下步骤,则会触发上述代码块中的 else 子句,因为由于某些原因 navController 未正确设置:

  1. 使用 CustomLoginViewController 上的 web 服务对我的应用程序进行身份验证
  2. 自动切换到 CustomMenuViewController
  3. 立即单击以触发对 CustomSubMenuViewController 的 segue
  4. 单击后退按钮以触发弹出
  5. 远程等待 web 服务超时
  6. 点击触发到同一个 CustomSubMenuViewController 的 segue

我的问题是:为什么当我第二次加载 ViewController 时,self.navigationController 是否返回 null?

上面示例中的调用堆栈应如下所示: NavigationController -> CustomLoginViewController -> CustomMenuViewController -> CustomSubMenuViewController

谢谢

更新:在这个问题上仍然没有任何进展!

4

2 回答 2

2

嘿,这听起来可能很基本,但是,您是否正确分配了 Navbar 对象,也许您可​​以尝试将其属性设置为 strong。它可能会在时间之前被释放。

于 2013-10-01T06:59:02.617 回答
1

我想你可能已经解决了这个问题,但我遇到了完全相同的事情。我认为我们可能会做同样的事情,比如使用 facebook 登录。无论如何,对于将来的其他人来说,这可能会有用。我遇到的问题是当我在失败条件下从后台返回时再次重新分配 UINavigationController。

因此,您可以尝试在为 UiNavigationController 初始化 rootViewController 的位置周围放置一个断点。

 [[UINavigationController alloc]
        initWithRootViewController:viewController]; and make sure that you do re-initailise your UINavigationController if you have already done it.
于 2014-10-08T21:36:29.910 回答