202 votes

@try - bloc catch en Objective-C

Pourquoi le bloc @try ne fonctionne-t-il pas ? Cela a fait planter l'application, mais c'était censé être capturé par le bloc @try.

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

 @try {
    [test characterAtIndex:6];

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

0 votes

Êtes-vous sûr qu'il ne s'agit pas d'autre chose, car le code exact que vous avez collé ci-dessus fonctionne parfaitement. 2010-07-29 16:45:57.677 test[93103:207] Exception : *** -[NSCFString characterAtIndex :]: Range or index out of bounds 2010-07-29 16:45:57.678 test[93103:207] finally

2 votes

Vous pouvez remplacer NSString* test = [NSString stringWithString:@"ss"] ; par NSString* test = @"ss" ;

150voto

iTux Points 538

Tout fonctionne parfaitement :)

 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");
 }

Journal :

[__NSCFConstantString characterAtIndex :]: Plage ou index hors limites

Char à l'index 5 introuvable

L'indice maximal est de : 3

Enfin la condition

8 votes

Correct mais un peu trompeur - rappelez-vous que le bloc @finally est exécuté dans les DEUX cas, c'est-à-dire indépendamment du fait qu'une exception ait été ou non levée.

0 votes

Oui, cela me manque :)

0 votes

Veuillez corriger comme @Elendurwen l'a indiqué.

79voto

Alexandru Circus Points 1332

J'ai maintenant trouvé le problème.

Retrait de la obj_exception_throw de mes points d'arrêt a résolu le problème. Maintenant, il est pris en charge par la fonction @try et aussi, NSSetUncaughtExceptionHandler Le traitement se fera si un @try est manquant.

11 votes

Si vous appuyez sur continue lorsque le débogueur s'interrompt, vous devriez voir l'exception levée et capturée par votre gestionnaire.

12voto

mbogh Points 720

Êtes-vous sûr qu'il ne s'agit pas d'autre chose, car le code exact que vous avez collé ci-dessus fonctionne correctement.

2010-07-29 16:45:57.677 test[93103:207] Exception: *** -[NSCFString characterAtIndex:]: Range or index out of bounds
2010-07-29 16:45:57.678 test[93103:207] finally

0voto

Claus Bönnhoff Points 454

Objective-C n'est pas Java. En Objective-C, les exceptions sont ce qu'elles sont appelées. Exceptions ! Ne les utilisez pas pour gérer les erreurs. Ce n'est pas ce qu'ils proposent. Vérifiez simplement la longueur de la chaîne avant d'utiliser characterAtIndex et tout ira bien....

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X