EDIT : 문제가 해결되었습니다 (부분적으로) : 시뮬레이터 버그입니다. 필자는 iOS 3.1.3 및 4.0을 사용하는 두 대의 장치에서이를 컴파일하고 테스트했습니다. 예외가 올바르게 처리되었습니다. 조심하십시오, 시뮬레이터는 적입니다!objective-c 및 xcode에서 예외 처리를 활성화하는 방법
이것은 나를 미치게합니다. 내 프로젝트에서 예외 처리를 활성화하는 방법을 모르겠습니다. 아래의 코드 및 디버거 출력을보십시오.
내 목표는 예외를 처리하고 예외를 처리하고 앱이 충돌하지 않도록 코드를 수정하지 않고 예외를 잡는 것입니다.
저는 Xcode 3.2.3, iPhone SDK 4 final을 사용하고 있습니다. 방금 iPhone App을 기반으로 간단한보기를 만들었습니다.
프로젝트 설정을 살펴본 결과 "Objective-C 예외 사용"스위치가 선택되었습니다. 나는 GCC 4.2를 사용하고있다.
빌드 프로세스를 자세히 살펴보면 컴파일러 플래그 -fno-objc-exceptions가 인수 목록에 없습니다!
무엇이 여기에 있습니까? 사전에
덕분에 닉
NSArray * foo = [[NSArray alloc] init];
@try {
NSLog(@"trying...");
[foo objectForKey:@"yeah"];
}
@catch (NSException * e) {
NSLog(@"catching %@ reason %@", [e name], [e reason]);
}
@finally {
NSLog(@"finally");
}
는 캐치이나 finally 블록 이제까지 도달 여부
trying...
-[__NSArrayI objectForKey:]: unrecognized selector sent to instance 0x5d5f780
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI objectForKey:]: unrecognized selector sent to instance 0x5d5f780'
*** Call stack at first throw:
(
0 CoreFoundation 0x02393919 __exceptionPreprocess + 185
1 libobjc.A.dylib 0x024e15de objc_exception_throw + 47
2 CoreFoundation 0x0239542b -[NSObject(NSObject) doesNotRecognizeSelector:] + 187
3 CoreFoundation 0x02305116 ___forwarding___ + 966
4 CoreFoundation 0x02304cd2 _CF_forwarding_prep_0 + 50
...
)
terminate called after throwing an instance of 'NSException'
에 연결됩니다.
게시물을 보내 주셔서 감사합니다. –
내가 이해하지 못하는 것은이 경우에 예외가있다 : NSInvalidArgumentException은 잡히지 않은 것으로 명시되고 NSException의 인스턴스이다. 따라서 잡힐 수없는 어떤 종류의 예외가있는 것 같습니다. 오브젝트의 인스턴스에 알 수없는 메시지를 보내는 것은 objective-c와 같은 동적 인 언어에서 공통적 인 경우가되어야합니다. 그런 예외를 어떻게 처리할까요? –
좋은 지적입니다. 'NSSetUncaughtExceptionHandler'를 들여다 보았습니까? 예 : http://stackoverflow.com/questions/1282364/iphone-exception-handling – Kalle