2010-11-19 78 views
1

所以我有一個UITabView控制器是在界面生成器中創建的。 UITabBarItem的標題和圖像屬性在IB中設置。一個選項卡欄控制器對象存在於xib中,並進行所有必要的連接。我可以調用簡單的命令,如UITabBar - setItems:animated:崩潰

[tabBarController setSelectedIndex:1];

一切正常,但當我設置'項目'屬性,我崩潰了。也許我有內存管理問題?

這裏是崩潰的代碼:

NSMutableArray *modifiedItems = [[tabBarController.tabBar items] mutableCopy]; 
[modifiedItems removeObjectAtIndex:2]; 
NSArray *newItems = [[NSArray alloc] initWithArray:modifiedItems]; 
-->[tabBarController.tabBar setItems:newItems animated:NO]; 

*終止應用程序由於未捕獲的異常「NSInternalInconsistencyException」,原因:「直接修改由選項卡欄控制器管理的標籤欄是不允許的。」在第一擲 *調用堆棧:

0 CoreFoundation      0x02b9bb99 __exceptionPreprocess + 185 
1 libobjc.A.dylib      0x02ceb40e objc_exception_throw + 47 
2 CoreFoundation      0x02b54238 +[NSException raise:format:arguments:] + 136 
3 CoreFoundation      0x02b541aa +[NSException raise:format:] + 58 
4 UIKit        0x005f7019 -[UITabBar setItems:animated:] + 2037 
5 Zag Map        0x00003422 -[ZagMapAppDelegate iPodTouchRemoval] + 270 
6 Zag Map        0x00002eea -[ZagMapAppDelegate applicationDidFinishLaunching:] + 551 
7 UIKit        0x003faf80 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1252 
8 UIKit        0x003fd3b0 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 346 
9 UIKit        0x004073ec -[UIApplication handleEvent:withNewEvent:] + 1958 
10 UIKit        0x003ffb3c -[UIApplication sendEvent:] + 71 
11 UIKit        0x004049bf _UIApplicationHandleEvent + 7672 
12 GraphicsServices     0x03357822 PurpleEventCallback + 1550 
13 CoreFoundation      0x02b7cff4 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 52 
14 CoreFoundation      0x02add807 __CFRunLoopDoSource1 + 215 
15 CoreFoundation      0x02adaa93 __CFRunLoopRun + 979 
16 CoreFoundation      0x02ada350 CFRunLoopRunSpecific + 208 
17 CoreFoundation      0x02ada271 CFRunLoopRunInMode + 97 
18 UIKit        0x003fcc6d -[UIApplication _run] + 625 
19 UIKit        0x00408af2 UIApplicationMain + 1160 
20 Zag Map        0x00002ca0 main + 102 
21 Zag Map        0x00002c31 start + 53 
    terminate called after throwing an instance of 'NSException' 

我的NSArray和NSMutableArray裏顯得精細考慮他們來到直出功能UITabBar的。它返回了三個對象,然後是兩個。我希望我只是在這裏忽略了一些愚蠢的東西。任何想法,我會很感激。

+0

你能異常消息?這真的會幫助我想。 – tia 2010-11-19 04:51:17

+0

點擊「斷點」,然後「建立和調試」。當它崩潰時,會有一個更詳細的錯誤,它會告訴你更多的信息出了什麼問題。 – 2010-11-19 09:31:34

回答

2

異常消息告訴你什麼是錯的:

「直接修改的標籤欄控制器管理的標籤欄是不允許的。」

改爲設置標籤欄控制器的viewControllers屬性。

+0

謝謝,這工作。我看到了其他人成功使用的相同代碼。 – mosca1337 2010-11-20 23:20:25

1
NSMutableArray *viewControllersCopy = [[tabBarController viewControllers] mutableCopy]; 
[viewControllersCopy removeObjectAtIndex:2]; 
NSArray *modifiedViewControllers = [[NSArray alloc] initWithArray:viewControllersCopy]; 
[tabBarController setViewControllers:modifiedViewControllers animated:NO]; 
+0

感謝工作像魅力 – sairam 2012-09-20 07:05:37

0

你可以不喜歡但─

tabBarController.selectedIndex = 1; // set index according to your requirement