UINavigation控制器阵列错误

时间:2011-05-16 18:43:34

标签: iphone objective-c uinavigationcontroller

我只是想知道弹出UINavigationController时遇到的一个错误。无论我目前在哪个UIViewController,我都实现了一个注销控制器,它可以弹回我的UINavigationController中的根控制器。这里列出了执行此操作的主要代码。

NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:0] animated:YES];
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);

这是控制台显示的内容。

Root Controller: DetailViewController
Root Controller: (null)

但是,当我将上述代码更改为:

NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);
[self.navigationController popToViewController:[self.navigationController.viewControllers objectAtIndex:1] animated:YES];
NSLog(@"Root Controller: %@", [[self.navigationController.viewController objectAtIndex:0] class]);

控制台中的结果显示为:

Root Controller: DetailViewController
Root Controller: DetailViewController

困扰我一段时间为什么当我将UINavigationController弹出到DetailViewController时它没有激活ViewWillAppear方法来更新我的登录信息。在我看来,当我弹出到0索引时,它正在访问一个超出范围的数组对象,但当我弹出索引1时,那就是当前根控制器所在的位置。有谁知道这会是什么原因?

1 个答案:

答案 0 :(得分:0)

我的猜测是self.navigationController从堆栈中弹出self后被设置为nil。

如果是这种情况,它看起来像弹出到视图控制器索引1不会将self.navigationController重置为nil(因为self是索引1处的视图控制器或viewWill中的某些调用|是吗?出现了再次设置它。