【发布时间】:2012-02-24 12:02:56
【问题描述】:
这个问题困扰了我一段时间,但我想我终于弄清楚了哪里出了问题;我认为我现在只需要一个解决方案......
这是应用的背景。用户可以使用大约 6 个不同的选项卡,使用 UITabBarController 显示。这些选项卡中的每一个都是一个自定义 UIViewController 子类,位于 UINavigationController 内。所有 6 个选项卡都设置在一个 nib 文件 (MainWindows.xib) 中。
我需要能够隐藏和显示不同的选项卡,具体取决于用户是否登录以及他们登录的对象。我有这样的工作:
在应用程序启动时(应用程序:didFinishLaunching: ...),六个选项卡存储到我拥有的 NSMutableArray 中。这工作正常...
当用户登录或注销时,我从 NSMutableArray 访问他可以使用的选项卡,并将它们添加到 UITabBarController 中,如下所示:
[tabBar setViewControllers: [NSArray arrayWithObjects:
[viewControllers objectAtIndex:1],
[viewControllers objectAtIndex:5],
nil] animated:YES];
viewControllers 是我之前用 6 个选项卡制作的 NSMutableArray。在我创建它之后对其执行 NSLog 会给出这个结果,这是我所期望的:
2012-02-24 11:45:57.690 [redacted][26155:207] (
"<UINavigationController: 0x8249db0>",
"<UINavigationController: 0x841a3f0>",
"<UINavigationController: 0x824be40>",
"<UINavigationController: 0x824dbd0>",
"<UINavigationController: 0x824e810>",
"<UINavigationController: 0x841dfb0>"
)
但是,当我从最后一个自定义视图控制器(位于该列表中的最后一个导航控制器内)打印 self.parentViewController 的值时,我得到以下信息:
2012-02-24 11:54:51.247 [REDACTED][26306:207] <UIMoreNavigationController: 0x826ab00>
2012-02-24 11:54:51.248 [REDACTED][26306:207] <UITabBarController: 0x8257c50>
第一行是self.parentViewController,第二行是self.parentViewController.parentViewController
这似乎表明heirachy是:
UITabBarController -> UIMoreNavigationController -> MyCustomController
但是当我打印 [self.parentViewController.parentViewController viewControllers]
我仍然得到:
(
"<UINavigationController: 0x8259770>",
"<UINavigationController: 0x825aa60>",
"<UINavigationController: 0x825bec0>",
"<UINavigationController: 0x82612c0>",
"<UINavigationController: 0x8261ec0>",
"<UINavigationController: 0x8263b00>"
)
UIMoreNavigationController 去哪儿了?谁能解释发生了什么?我遇到了与此相关的问题,因为我使用了该数组,但是最后一个 UINavigationController 不是它声称的对象。
我有一种预感,苹果正在摆弄幕后的对象,以使程序员更容易......
我将尝试回答您对代码结构、我如何使用不同对象或测试某些代码的任何问题。非常感谢您。
【问题讨论】:
-
首先,如果
self.parentViewController.parentViewController是标签栏控制器,您为什么希望该数组发生变化? -
其次,你的 UIMoreNavigationController 是在哪里创建的?如果它是在您的最后一个自定义视图控制器中创建的,那么标签栏控制器将对此一无所知。 tabbarcontroller 中的视图控制器数组没有定义视图控制器层次结构。在其中一个自定义视图中更改该层次结构也不会影响该视图控制器数组。
-
这不是我的 UIMoreNavigationController。这就是问题所在,它不是我创造的。我大约 100% 确定我的项目中没有名为 UIMoreNavigationController 的类...我将尝试上传一个最小的项目,稍后仍会显示该类。
-
我觉得很奇怪你的日志有一个
UIMoreNavigationController类的证据 - AFAIK 甚至 iOS 都没有这样的类。但也许我只是过时了......你使用哪个版本的 iOS SDK? -
我不知道您是否设法解决了这个问题(即使您已经接受了答案),但我遇到了完全相同的问题并设法将其追踪到 UITabBarController 的创建方式。而不是使用
[[UITabBarController alloc] initWithCoder:nil],而是使用[[UITabBarController alloc] init]。这可能看起来很明显,但我只是浪费了 2 个小时试图解决这个问题!
标签: ios ios5 uitabbarcontroller uitabbar