EDIT: Das Problem wurde (teilweise) gelöst: Es handelt sich um einen Simulatorfehler. Ich habe dies auf zwei Geräten mit iOS 3.1.3 und 4.0 kompiliert und getestet. Die Ausnahme wurde korrekt behandelt. Seien Sie vorsichtig, der Simulator ist Ihr Feind!
Das macht mich verrückt. Ich weiß nicht, wie ich die Ausnahmebehandlung in meinem Projekt aktivieren kann. Sehen Sie sich den Code und die Debugger-Ausgabe unten an.
Mein Ziel ist es, die Ausnahme abzufangen, nicht den Code zu korrigieren, damit die Ausnahme behandelt wird und die Anwendung nicht abstürzt.
Ich verwende XCode 3.2.3, iPhone SDK 4 final. Ich habe gerade eine einfache Ansicht basierte iPhone App erstellt, um dies zu testen.
Ich habe in meinen Projekteinstellungen nachgesehen und ja, der Schalter "Objective-C-Ausnahmen aktivieren" ist aktiviert. Ich verwende GCC 4.2.
Wenn ich mir den Build-Prozess im Detail ansehe, ist das Compiler-Flag -fno-objc-exceptions nicht in der Liste der Argumente enthalten!
Was übersehe ich hier?
Vielen Dank im Voraus Nick
NSArray * foo = [[NSArray alloc] init];
@try {
NSLog(@"trying...");
[foo objectForKey:@"yeah"];
}
@catch (NSException * e) {
NSLog(@"catching %@ reason %@", [e name], [e reason]);
}
@finally {
NSLog(@"finally");
}
führt zu
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'
Ob der Fang oder der Endblock jemals erreicht wird.