2015-01-11 6 views
1

NSLogv에 대한 간단한 래퍼가 있습니다. 형식 문자열에 너무 많은 자리 표시자가있는 경우 예외를 throw하는 것을 제외하고는 정상적으로 작동합니다. 그 예외를 잡으려고하지만이 @try 블록이 작동하지 않습니다. 왜?@try가 EXC_I386_GPFLT를 잡지 못합니까?

[[MYLogger error:@"%@ %@", value]; 
+0

예외를 잡는 이유는 무엇입니까? 프로그래머가 버그이기 때문에 충돌을 원합니다. 개발 및 테스트에서 문제를 찾아 수정하십시오. – rmaddy

+0

Objective-C에서'@ try'는 예외가 발생했을 때 "정상적으로 실패"하는 데에만 사용해야합니다. 자바 예외처럼 자연스럽게 사용되도록 의도되지 않았습니다. –

+0

이 예외를 잡는 것은 최종 방어선입니다. 자리 표시 자의 수가 잘못 설정된 오류 로그 문 때문에 앱이 다운되는 것을 원하지 않습니다. –

답변

1

@try 예외를 캐치 : 여기

- (void)error:(NSString *)formatString, ...; 
{ 
    @try { 
     va_list arglist; 
     va_start(arglist, formatString); 
     formatString = [NSString stringWithFormat:@"ERROR: %@", formatString]; 
     NSLogv(formatString, arglist); 
     va_end(arglist); 
    } 
    @catch (NSException *exception) { 
     // Handle exception ... 
    } 
} 

예외가 발생하는 예이다. 당신은 신호를 잡으려고합니다.

제 조언 : 시도조차하지 마십시오.

+0

같은 문제가 있습니다. 하드웨어 장치에는 문제가 없지만 시뮬레이터에서 테스트 할 때이 문제가 발생합니다. 모든 업데이트? – 4ntoine