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