2010-11-19 8 views
1

私はインターフェイスビルダーで作成されたUITabViewコントローラを持っています。 UITabBarItemのtitleプロパティとimageプロパティはIBに設定されています。 Tab Bar Controllerオブジェクトが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から出てきた検討罰金のように見えます。それは3つのオブジェクトを返し、2つはオブジェクトを返しました。私はここで何か愚かなものを見落としているだけでいいと思う。私が本当に感謝する任意のアイデア。

+0

のように行うことができますか?それが本当に私の考えを助けるだろう。 – tia

+0

「ブレークポイント」をクリックし、「ビルドとデバッグ」をクリックします。クラッシュすると詳細なエラーが表示され、何が間違っているのかを詳しく知ることができます。 –

答えて

2

例外メッセージが間違っている正確に何を説明します:

「を直接タブバーコントローラによって管理さタブバーを修正するには許可されていません。」

タブバーコントローラのviewControllersプロパティを代わりに設定します。

+0

ありがとうございました。私は同じコードが他の人によってうまく使われているのを見ました。 – mosca1337

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

ありがとうございました。 – sairam

0

あなたは例外メッセージを取得することはできthat-

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