2010-02-12 73 views
0

有人发布了一个类似的问题,没有解决方案,但也没有示例代码。所以,我想我会在这里详细发布我的问题。删除UITabBarController

我有几种游戏模式的游戏,每个模式都有几个选项。在玩过各种设计之后,将它们放入带有三个选项卡的UITabBarController似乎最为清晰,每种​​类型的游戏都有一个选项卡。我创建其从主菜单屏幕加载(更换主屏幕),并初始化的UITabBarController如下新的UIViewController:

barController = [[UITabBarController alloc] init]; 

Games1 *vc1 = [[[Games1 alloc] initWithNibName:@"Games1" bundle:nil] autorelease]; 
Games2 *vc2 = [[[Games2 alloc] initWithNibName:@"Games2" bundle:nil] autorelease]; 
Games3 *vc3 = [[[Games3 alloc] initWithNibName:@"Games3" bundle:nil] autorelease]; 

NSArray* controllers = [NSArray arrayWithObjects:vc3, vc1, vc2, nil]; 
barController.viewControllers = controllers; 
[self.view addSubview:barController.view]; 

当用户选择一个游戏,我从窗口和释放作为除去的UIViewController如下:

- (void)dealloc { 
    printf("Games released: barController: %d\n", [barController retainCount]); 
    [barController.view removeFromSuperview]; 
    barController.viewControllers = 0; 
    [barController release]; 
    barController = 0; 
    [super dealloc]; 
} 

我的问题是,当我旋转设备,我得到一个崩溃。如果我直接从主屏幕启动游戏模式并旋转,则不会崩溃。我已经验证了所有内容都已被释放,并且我在条形控制器上的保留数为1.有关如何消除此崩溃的任何建议?谢谢!

[编辑]多一点信息:

的barController被定义为:

IBOutlet UITabBarController *barController; 

有:

@property (nonatomic, retain) IBOutlet UITabBarController *barController; 

回答

1

它结束了问题只是与UITabBarController外设相关。我正在将UIViewControllers直接添加到我的应用程序窗口中,并已显示在其他地方引发了问题。添加一个主UIViewController/UIView,只添加和删除,修复了一切,虽然自动释放而不是释放可能也起作用。看到这里的讨论:

View Controller being sent a message even though it has been deallocated

的的UITabBarController只是导致问题更迅速和明显地发生。

0

不要这样做:

barController.viewControllers = 0; 

在-dealloc中你应该只有r从超级视图中移除UITabBarController的视图并释放它。

+0

感谢您的建议。我放了这条线来尝试解决问题;删除它并没有什么区别。 – 2010-02-12 06:49:56