self.navigationController在作为RootViewController分配后为null?

时间:2011-08-11 04:23:30

标签: ios objective-c xcode uinavigationcontroller

我创建了一个新的xcode项目作为基于视图的应用程序,我有一组UIViewController(s),我计划在单独的UINavigationController内使用。

在所有ParentViewController.m之前的UINavigationController以及所有myViewControllers启动之后:

NSMutableArray *navControllers = [[NSMutableArray array];
for (id aVC in self.myViewControllers) {
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];

    //[aVC setNavigationController:navController];
    [navController setNavigationBarHidden:YES];
    [navController setToolbarHidden:YES];
    [navControllers addObject:navController];
    [navController release];
}

_navigationControllers = [[NSArray arrayWithArray:navigationControllers] retain];

_navigationControllers被保留为ParentViewController的成员,因此我认为我在for循环中启动的所有导航控制器都由_navigationControllers保留,因此它们不会被释放或变为{ {1}},但是当我尝试在nil中使用navigationController来推送MyViewController时,它不起作用:

SomeOtherViewController

我在- (IBAction)pushDetailView { [self.navigationController pushViewController:self.detailViewController animated:YES]; } 和“po [self navigationController]”之前设置了断点,控制台告诉我它是pushViewController:someOtherViewController引用。

我假设当我这样做的时候 nil,底层机制会将[[UINavigationController alloc] initWithRootViewController:aVC]指定为navigationController,因为Apple的“适用于iOS的View Controller编程指南”在不将aVC.navigationController分配给navigationController的情况下也是如此}。

除非我取消标记for循环rootController的第二行,否则{V}中不存在//[aVC setNavigationController:navController];

我误解了机制吗?我的案子还有另一种解决方案吗? 提前谢谢!

1 个答案:

答案 0 :(得分:-1)

_navigationControllers = [NSMutableArray array];
for (id aVC in self.myViewControllers) {
    UINavigationController *navController = [[UINavigationController alloc] initWithRootViewController:aVC];

    //[aVC setNavigationController:navController];
    [navController setNavigationBarHidden:YES];
    [navController setToolbarHidden:YES];
    [navControllers addObject:navController];
}

// assuming index 0 navigation controller is with 'ParentViewController'
self.rootViewController = [_navigationControllers objectAtIndex:0];

检查一下。