2009-12-18 4 views
0

친구가 어제 iPhone 프로그래밍에 대한 작은 자습서를 보냈습니다. 그런 다음 TabBar를 사용하여 전환 할 수있는 두 개의보기가있는 작은 프로그램을 만들려고했습니다. 하나는 파란색 배경, 다른 하나는 빨간색으로 바뀝니다.iPhone SDK의 TabBar 예외

그것은 그들이 잘 표시,하지만 난 (시뮬레이터)를 실행하고 탭을 클릭하면, 그와 함께 추락 :

"때문에 캐치되지 않는 예외 'NSInvalidArgumentException'응용 프로그램 종료, 이유 : '*** - [NSMachPort 는 _tabBarItemClicked :] : 인식 할 수없는 선택기 "

내가 지금까지 버그를 발견하지 못했다 0x38223e0 인스턴스에 전송 ... 당신은 어떤 아이디어를 가지고 있나요? DemoAppDelegate에서 :)

코드 :

- (void)applicationDidFinishLaunching:(UIApplication *)application {  

    // Override point for customization after application launch 
    [window makeKeyAndVisible]; 


    UIColor *color = [UIColor blueColor]; 
    DemoAppViewController *controller1 = [[DemoAppViewController alloc] initWithColor:color]; 

    color = [UIColor redColor]; 
    DemoAppViewController *controller2 = [[DemoAppViewController alloc] initWithColor:color]; 


    [controller1 updateBackground]; 
    [controller2 updateBackground]; 


    UITabBarController *tbcontroller = [[UITabBarController alloc] init]; 
    NSMutableArray *array = [NSMutableArray arrayWithObjects: controller1, controller2, nil]; 

    UITabBarItem *item = [[UITabBarItem alloc] initWithTitle:@"Blue" image:nil tag:1]; 
    [controller1 setTabBarItem: item]; 
    [item release]; 

    item = [[UITabBarItem alloc] initWithTitle:@"Red" image:nil tag:2]; 
    [controller2 setTabBarItem: item]; 
    [item release]; 

    [tbcontroller setViewControllers:array]; 
    [tbcontroller setSelectedIndex:0]; 

    [window addSubview: [tbcontroller view]]; 
    [tbcontroller release]; 

    [controller1 release]; 
    [controller2 release]; 

} 

코드 발췌 DemoAppViewController에서 :

- (DemoAppViewController *) initWithColor:(UIColor *)color 
{ 
    self = [super init]; 

    if (self != nil) { 
     [color retain]; 
     backgroundColor = color; 
    } 

    return self; 
} 

- (void) updateBackground 
{ 
    UIView *view = [self view]; 
    [view setBackgroundColor: backgroundColor]; 
} 

답변

3
문제는이 줄 것으로 보인다

:이 할당 해제됩니다 [tbcontroller release];

당신의 tbcontroller. 나는 그 코드 라인을 주석 처리했으며 작동한다. 분명히 하위보기를 추가하는 것이 작업을 수행하지 않기 때문에 다른 곳에서 컨트롤러를 유지하도록하십시오. 그것은 또한 자신이 출시 된 viewcontroller와 관련이있을 수 있습니다.

+0

확실히 충돌을 해결합니다. 감사합니다. 하지만 하위 뷰에서 유지되지 않는 이유는 무엇입니까? – Patrick