web-dev-qa-db-fra.com

@try - bloc de capture dans Objective-c

Pourquoi le bloc @try ne fonctionne-t-il pas?.

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

 @try {
    [test characterAtIndex:6];

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

Maintenant j'ai trouvé le problème.

Supprimer le obj_exception_throw de mes points d'arrêt a résolu ce problème. Maintenant, il est pris par le bloc @try et NSSetUncaughtExceptionHandler le gérera si un bloc @try est manquant.

72
Alexandru Circus

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

Bûche:

[__NSCFConstantString characterAtIndex:]: plage ou index hors limites.

Caractère à l'index 5 introuvable

L'indice maximum est: 3

Enfin condition

117
iTux

Êtes-vous sûr que ce n'est pas autre chose parce que le code exact que vous avez collé ci-dessus fonctionne bien.

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
12
mbogh

Objective-C n'est pas Java. En Objective-C, les exceptions sont comme elles sont appelées. Exceptions! Ne les utilisez pas pour la gestion des erreurs. Ce n’est pas leur proposition… .. Il suffit de vérifier la longueur de la chaîne avant d’utiliser characterAtIndex et tout va bien….

0
Claus Bönnhoff