self.navigationController.view在iOS5中为nil,但在iOS4中不是

时间:2011-11-08 11:37:25

标签: ios4 navigationcontroller ios5

我有一个奇怪的问题。我正在使用navigationController,并希望将子视图(MBProgressHUD)添加到navigationController.view。

在iOS4下一切都很好。但是,如果我使用相同的代码片段切换到iOS5,应用程序崩溃,因为navigationController.view现在为零。

所以必须有一些在iOS4下有效但在我的代码中不在iOS5下的东西。

有人猜到我在做什么部分错了吗?设置视图的iOS4和iOS5之间有什么区别吗?

我现在不知何故丢失了,因为我没有可以搜索的一般错误,但在iOS5的上下文中没有更具体的错误。

我知道这是一个非常笼统的描述,但我认为在这里发布我的完整代码太过分了。

所以我非常感谢每一个提示,因为我完全不知道那里有什么问题。

谢谢,

安德烈亚斯

更新1:

我知道问题是因为tabBarController而发生的。

这是以下方式:

当用户点击UITableView中的一行时,该应用程序会打开一个tabBarController,其中包含三个视图,每个视图包含一个UINavigationController和一个视图。

所以我用以下内容初始化这个结构:

    self.tabBarController = [[UITabBarController alloc] init];
    SomeUIViewController* tabOne = [[SomeUIViewController alloc] init];
    tabOne.tableViewContext = self.conferenceContext;

    SomeUIViewController* tabTwo = [[SomeUIViewController alloc] init];
    tabTwo.delegate = tabOne;

    SomeUIViewController* home = [[SomeUIViewController alloc] init];

    [self.tabBarController setViewControllers:[NSArray arrayWithObjects:tabOne, tabTwo, home, nil]];

    [self.navigationController pushViewController:self.tabBarController animated:YES];

    [home release];
    [tabTwo release];
    [tabOne release];

所以错误似乎在这些代码行中。因为如果我只在没有tabBar的情况下初始化tabOne-View,那么在iOS5下也可以完美地工作。但是如果我用这些代码行初始化一个tabBar,我就会收到错误。

有人可以解释一下我在iOS5视角下出了什么问题,因为这段代码在iOS4下完美运行。

更新2(重要)

所以,我认为问题是navController。我的结构如下:window-> navController-> tabBar。

似乎是这样,在iOS4下,应用程序可以访问tabBarView中的navController,但不能访问iOS5。

2 个答案:

答案 0 :(得分:2)

这是一个逻辑问题。导航控制器是视图控制器的容器。因此它没有与之相关的视图。尝试这样的事情:

UIView *currentView = [[myNavigationController visibleViewController] view];

答案 1 :(得分:2)

所以,我终于找到了解决这个问题的方法。但我不明白为什么它只出现在iOS5中。

所以问题是,我想在viewDidLoad中访问navController。实际上,在iOS5中,navController直到这一点才被链接。这就是错误发生的原因。如果我在viewWillAppear中移动代码段,则一切正常。

但为什么这只出现在iOS5中,为什么它在iOS4中使用viewDidLoad?

这是我头脑中仍然存在的最后一个问题。

但现在应用程序在iOS5中运行,我很高兴; - )