2010-02-12 69 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