我最近对我的项目做了一些重组,现在我没有看到我的标签栏控制器,但它的第一个视图控制器的视图正在出现。以下是问题发生之前发生的所有事情的细分。
App Delegate使用nib加载FirstViewController。 FirstViewController从我的服务器加载应用程序数据,然后向MainViewController提供模态转换。 MainViewController是UITabBarController应该出现的地方。这是一个非常简单的课程。
.h
@interface MainViewController : UIViewController <UITabBarControllerDelegate> {
IBOutlet UITabBarController *tabBarController;
}
@property (nonatomic, retain) UITabBarController *tabBarController;
@end
.m
@implementation MainViewController
@synthesize tabBarController;
- (void)viewDidLoad {
NSLog(@"MainViewController viewDidLoad");
//set tab bar controller delegate to self
tabBarController.delegate = self;
// home view
HomeViewController *home = [[HomeViewController alloc] initWithTab];
// menu view
MenuViewController *menu = [[MenuViewController alloc] initWithTab];
// special offers view
SpecialOffersViewController *so = [[SpecialOffersViewController alloc] initWithTab];
// events view
EventsViewController *events = [[EventsViewController alloc] initWithTab];
// info view
InfoViewController *info = [[InfoViewController alloc] initWithTab];
//populate the tab bar controller with view controllers
NSArray *controllers = [NSArray arrayWithObjects:home, menu, so, events, info, nil];
tabBarController.viewControllers = controllers;
//release view controllers
[home release];
[menu release];
[so release];
[events release];
[info release];
[controllers release];
//add tab bar controller to view
[self.view addSubview:tabBarController.view];
[super viewDidLoad];
}
这是来自FirstViewController的一点,它模态地呈现了MainViewController ......
MainViewController *controller = [[MainViewController alloc] initWithNibName:@"MainViewController" bundle:nil];
controller.modalTransitionStyle = UIModalTransitionStyleFlipHorizontal;
[self presentModalViewController:controller animated:YES];
[controller release];
我没有收到任何编译器错误或警告,并且应用程序运行膨胀......没有崩溃。它只是没有显示已经达到的TabBar,而且在我在AppDelegate上创建它时它已经习惯了。我检查了我的NIB中的所有内容,我的网点似乎已经连接好了。我不知道发生了什么。救命啊!
答案 0 :(得分:0)
我不确定这是否是您问题的原因,但可能是:
您可以创建控制器数组,如下所示:
NSArray *controllers = [NSArray arrayWithObjects:home, menu, so, events, info, nil];
没关系。 controllers
有+0(自动释放)保留计数。
然后将其分配给tabBar的viewControllers
属性:
tabBarController.viewControllers = controllers;
那也没关系。 controllers
现在有+1保留计数(自动释放+ tabBarController
保留)
然后发布controllers
:
[controllers release];
controllers
现在有+0保留计数,这意味着下次runloop旋转时,您的数组将被释放,后续视图将消失(因为它们已被释放),以及您的应用程序可能最终会崩溃。
简单修复:您没有alloc
,retain
或copy
controllers
数组,因此您不对release
负责。删除release
,您的内存管理将是正确的。它可能会解决您的问题,因为这是我唯一能够立即看到的问题。
答案 1 :(得分:0)
来自文档:
因为UITabBarController类 继承自UIViewController 类,标签栏控制器有它们的 自己可以访问的视图 视图属性。 部署时 标签栏界面,必须安装 此视图作为窗口的根。 与其他视图控制器不同,标签 吧界面永远不应该 安装为另一个视图的孩子 控制器。强>