2011-05-31 94 views
1

嗨 我想動態地添加和刪除標籤欄元素。有兩個數組。首先顯示一個名爲「More」的添加tabbaritem,當用戶按下More時,其他數組將添加到tabbar。用戶可以按第二個數組中的Less tabbaritem返回第一個數組。問題是,當我經常按順序更多和更少tabbaritems更多,更少,更多,更少,更多,更少 - 應用程序崩潰後最後少。陣列看起來對我來說是好的,tabbar控制器也是如此。我無法弄清楚問題所在。 下面是標籤欄委託方法的代碼。應用程序在UITabBarController委託方法崩潰

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
NSLog(@"selected view controller is :%@",viewController); 
if(viewController.view.tag == -1){ 
    [self.tabBarController setViewControllers:self.level2TabBarItems animated:YES]; 
    [self.tabBarController setSelectedIndex:0]; 
}else if(viewController.view.tag == -2){ 
    [self.tabBarController setViewControllers:self.level1TabBarItems animated:YES]; 
    [self.tabBarController setSelectedIndex:0]; 
} 

}

任何人都可以請讓我知道我做錯了嗎? 最好的問候

+0

你能在這裏發表的崩潰日誌? – 2011-05-31 10:56:10

+0

我忘了提到崩潰發生在行[self.tabBarController setViewControllers:self.level1TabBarItems animated:YES];此外,我的Library/Logs文件夾中也沒有爲這種情況生成崩潰報告。我已經在斷點的幫助下檢查了uitabbarcontroller和level1TabbarItems,它們都不爲null或爲空。 – Aqueel 2011-05-31 11:38:42

回答

0

發表評論NSLog在這裏。這不是打印此格式的正確格式。

0

可能是你的數組是空的。試着設置一個斷點,你會發現哪條線路導致崩潰的解決方案。

+0

沒有先生的陣列不是空的:( – Aqueel 2011-05-31 11:40:59

+0

然後調試你的應用程序,你一定會發現你的崩潰的解決方案 – 2011-05-31 11:41:51

0

我認爲無論if和else if不滿足這個條件

您只需查看標籤與此NSLog(@"%d",viewController.view.tag);

+0

應用程序崩潰[self.tabBarController setViewControllers:self.level1TabBarItems animated:YES];所以我不認爲這個問題是不是在NSLog。條件工作正常。 – Aqueel 2011-05-31 11:41:54

1

我有類似的問題。我想你在你的數組中構造了一個新的VC實例,所以頻繁地切換更多/更少會導致從舊實例調用方法(在那個時候還沒有被替換)。

不幸的是setViewControllers方法(如documentation說)自動刪除舊的視圖控制器調用dealloc,似乎沒有其他方式來重用它們。

在你的情況,你可以嘗試禁用選擇舌直至tabBarController:didSelectViewController:執行實現(我沒有測試):

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { 
    self.selectLock = YES; 
    // your code 
    self.selectLock = NO; 
} 

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController { 
    return !self.selectLock; 
} 
相關問題