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

self.navigationController.view在iOS5中为零,但在iOS4中不为零,ios4,navigationcontroller,ios5,Ios4,Navigationcontroller,Ios5,我有个奇怪的问题。我正在使用navigationController,希望将子视图(MBProgressHUD)添加到navigationController.view 在iOS4下一切都很好。但是如果我使用相同的代码切换到iOS5,应用程序就会崩溃,因为navigationController.view现在为零 因此,在我的代码中,一定有在iOS4下工作但在iOS5下不工作的东西 有人能猜到我在那里做错了什么吗?iOS4和iOS5在设置视图时有什么区别吗 我现在不知怎么迷路了,因为我没有可以搜

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

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

因此,在我的代码中,一定有在iOS4下工作但在iOS5下不工作的东西

有人能猜到我在那里做错了什么吗?iOS4和iOS5在设置视图时有什么区别吗

我现在不知怎么迷路了,因为我没有可以搜索的一般性错误,但在iOS5的上下文中有更具体的错误

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

所以我真的很感激每一个提示,因为我完全不知道那里出了什么问题

谢谢

安德烈亚斯

更新1:

我知道问题的发生是因为一个Tabbar控制器

是这样的:

当用户单击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];
因此,错误似乎在这些代码行中。因为如果我只初始化tabOne视图而不使用tabBar,那么在iOS5下,所有的东西都能完美地工作。但是如果我用这些代码行初始化一个tabBar,我就会得到错误

有人能解释一下在iOS5透视图下有什么问题吗,因为这段代码在iOS4下工作得非常好

更新2(重要)

所以,我认为问题在于导航控制器。我的结构如下:窗口->导航控制器->选项卡栏


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

这是一个逻辑问题。导航控制器是视图控制器的容器。因此,它没有与之关联的视图。试着这样做:

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

这是一个合乎逻辑的问题。导航控制器是视图控制器的容器。因此,它没有与之关联的视图。试着这样做:

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

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

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

但为什么这只发生在iOS5中,为什么它在iOS4中与viewdiload一起工作

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


但是现在这个应用程序运行在iOS5上,我有点高兴;-)

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

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

但为什么这只发生在iOS5中,为什么它在iOS4中与viewdiload一起工作

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


但是现在这个应用程序运行在iOS5上,我有点高兴;-)

谢谢!但这并没有解决我的问题。但无论如何:谢谢你。你看到我上面的更新了吗?你猜得到了吗?谢谢!但这并没有解决我的问题。但无论如何:谢谢你。你看到我上面的更新了吗?你对此有猜测吗?你在哪里分配和初始化了tabBar控制器?哦,对不起,我在其他代码之前分配和初始化了tabBar(见上面的更新)。我将在同一UIViewController的dealloc方法中释放它可能是个漏洞。你是对的。我有一个非原子的保留属性。所以我只发布了一次tabBar,但保留了两次。所以我现在加了一个自动释放。所以现在不应该有漏洞了。navController也一样,我也有同样的问题。但它仍然不起作用。这一定是特定于iOS5的问题,因为它在iOS4下仍然有效。非常奇怪的问题。你在哪里分配和初始化了tabBar控制器?哦,对不起,我在其他代码之前分配和初始化了tabBar(见上面的更新)。我将在同一UIViewController的dealloc方法中释放它可能是个漏洞。你是对的。我有一个非原子的保留属性。所以我只发布了一次tabBar,但保留了两次。所以我现在加了一个自动释放。所以现在不应该有漏洞了。navController也一样,我也有同样的问题。但它仍然不起作用。这一定是特定于iOS5的问题,因为它在iOS4下仍然有效。非常奇怪的问题。请注意,iOS 5中有一个更改:不再为模式视图设置parentViewController——您必须改用presentingViewController。(当然,在iOS 4中不提供presentingViewController。)请注意,iOS 5中有一个更改:不再为模式视图设置parentViewController——您必须改用presentingViewController。(当然,presentingViewController在iOS 4中不可用。)