@try - Fangblock in Objective-C


193

Warum funktioniert @try block nicht? Die App stürzte ab, sollte aber vom @try-Block abgefangen werden.

 NSString* test = [NSString stringWithString:@"ss"];

 @try {
    [test characterAtIndex:6];

 }
 @catch (NSException * e) {
    NSLog(@"Exception: %@", e);
 }
 @finally {
    NSLog(@"finally");
 }

Sind Sie sicher, dass es sich nicht um etwas anderes handelt, da der genaue Code, den Sie oben eingefügt haben, einwandfrei funktioniert? 2010-07-29 16: 45: 57.677 Test [93103: 207] Ausnahme: *** - [NSCFString CharacterAtIndex:]: Bereich oder Index außerhalb der Grenzen 2010-07-29 16: 45: 57.678 Test [93103: 207] endlich
mbogh

2
Sie können NSString ersetzen * test = [NSString stringWithString: @ "ss"]; mit NSString * test = @ "ss";
Duyen-Hoa

Antworten:


136

Alle funktionieren perfekt :)

 NSString *test = @"test";
 unichar a;
 int index = 5;
    
 @try {
    a = [test characterAtIndex:index];
 }
 @catch (NSException *exception) {
    NSLog(@"%@", exception.reason);
    NSLog(@"Char at index %d cannot be found", index);
    NSLog(@"Max index is: %lu", [test length] - 1);
 }
 @finally {
    NSLog(@"Finally condition");
 }

Log:

[__NSCFConstantString characterAtIndex:]: Bereich oder Index außerhalb der Grenzen

Char bei Index 5 kann nicht gefunden werden

Maximaler Index ist: 3

Endlich Zustand


8
Richtig, aber etwas irreführend - denken Sie daran, dass der @ finally-Block in BEIDEN Fällen ausgeführt wird, dh unabhängig davon, ob eine Ausnahme ausgelöst wurde oder nicht.
Elendurwen

Ja, ich vermisse das :)
iTux

Bitte korrigieren Sie wie @Elendurwen angegeben.
Sanich

78

Jetzt habe ich das Problem gefunden.

Das Entfernen von obj_exception_throwvon meinen Haltepunkten löste dieses Problem. Jetzt wird es vom @tryBlock abgefangen und wird auch NSSetUncaughtExceptionHandlerbehandelt, wenn ein @tryBlock fehlt.


10
Wenn Sie auf Weiter klicken, wenn der Debugger unterbrochen wird, sollte die Ausnahme von Ihrem Handler ausgelöst und abgefangen werden.
JeremyP

1

Objective-C ist nicht Java. In Objective-C werden Ausnahmen so genannt. Ausnahmen! Verwenden Sie sie nicht zur Fehlerbehandlung. Es ist nicht ihr Vorschlag. Überprüfen Sie einfach die Länge der Zeichenfolge, bevor Sie characterAtIndex verwenden, und alles ist in Ordnung ....


Die Verwendung von try-catch in Objective-C wird im Allgemeinen nicht empfohlen, da dies den ARC möglicherweise durcheinander bringen kann.
Langsam
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.