2012-04-24 2 views
1

아래에 소스가 있습니다.왜 SIGABRT 오류가 발생합니까?

- (void)Button:(UIButton *)button { 

    NSString *imageName = ((UIButton *)[self.view viewWithTag:button.tag]).titleLabel.text; 

} 

- (void)viewDidLoad { 

    NSMutableArray *_array = [[NSMutableArray alloc] init]; 

    NSInteger iCount = [_array count]; 

    for (i = 0; iCount > i; i++) { 

     UIButton *btn = [[UIButton alloc] init]; 
     btn.titleLabel.text = [[_array objectAtIndex:i] objectForKey:@"FILE"]; 
     btn.tag = i; 
     [btn addTarget:self action:@selector(Button:) forControlEvents:UIControlEventTouchUpInside]; 
     [self.view addSubview:btn]; 
     [btn release]; 

} 

인덱스 메서드가 0 인 Button 메서드에 액세스하면 SIGABRT 오류가 발생합니다. 어떻게해야합니까?

+0

이 오류는 사용자가 전달한 자체 객체가 실제로는 버튼이 아니라보기 컨트롤러이기 때문에 발생합니다. – rishi

답변

2

콘솔 출력을 올바르게 읽습니다. 기본적으로 모든보기의 태그는 '0'이므로 uibutton 이외의 다른보기를 사용하고 있기 때문에 충돌 할 수 있습니다.보기에는 titleLabel이 없습니다. 속성입니다. UIButton의 속성이기 때문에.

+0

*** 캐치되지 않은 예외 'NSInvalidArgumentException'으로 인해 응용 프로그램을 종료합니다. 이유 : '- [UIView titleLabel] : 인스턴스 0x98053a0에 전송 된 인식 할 수없는 선택기' *** 처음 호출 스택 : 블러 블러 .. –

+0

콘솔 메시지 위 –

+1

** [UIView titleLabel] : ** ** [UIButton titleLabel] **이어야합니다. 즉, - [self.view viewWithTag : button.tag]을 반환합니다. 여기 UIView를 반환합니다. (현재보기 ('self'로 액세스))) .. 당신은 1이나 다른 것으로 버튼 태그를 시작할 필요가 있지만 0은 아니다. 그래서 어떤보기와도 충돌하지 않을 것이다. –

관련 문제