2010-11-19 2 views
1

그래서 인터페이스 작성기에서 만든 UITabView 컨트롤러가 있습니다. UITabBarItem의 제목 및 이미지 속성이 IB에 설정되었습니다. Tab Bar Controller 객체가 xib에 있고 필요한 모든 연결이 이루어집니다.UITabBar - setItems : animated : 크래시

[tabBarController setSelectedIndex : 1]와 같은 간단한 명령을 호출 할 수 있습니다.

모든 것이 제대로 작동하지만 'items'속성을 설정할 때 충돌이 발생합니다. 어쩌면 메모리 관리 문제가있을 수 있습니까?

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

+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

당신은 예외 메시지를받을 수 드리려고

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