我有一个奇怪的问题。我正在使用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。
答案 0 :(得分:2)
这是一个逻辑问题。导航控制器是视图控制器的容器。因此它没有与之相关的视图。尝试这样的事情:
UIView *currentView = [[myNavigationController visibleViewController] view];
答案 1 :(得分:2)
所以,我终于找到了解决这个问题的方法。但我不明白为什么它只出现在iOS5中。
所以问题是,我想在viewDidLoad中访问navController。实际上,在iOS5中,navController直到这一点才被链接。这就是错误发生的原因。如果我在viewWillAppear中移动代码段,则一切正常。
但为什么这只出现在iOS5中,为什么它在iOS4中使用viewDidLoad?
这是我头脑中仍然存在的最后一个问题。
但现在应用程序在iOS5中运行,我很高兴; - )