Вы можете вставить блок try / catch внутри цикла следующим образом:
bool done = NO;
while ( ! done ) {
try {
done = YES;
} catch {
}
}
Это приведет к повторному выполнению всего блока.Если вы хотите продолжить с того места, на котором остановились, вам нужно отслеживать свое состояние по пути:
bool done = NO;
int state = 0; // setup some constants, kStateA = 0, kStateB = 1, etc:
while ( ! done ) {
try {
switch ( state ) {
case kStateA: line 1; ++state; // fall through
case kStateB: line 2; ++state;
// etc.
}
done = YES;
} catch {
}
}
Приведенный выше код, упрощенный, чтобы больше соответствовать вашему вопросу, выглядит следующим образом (хотяконцепция машины все еще лежит в основе):
bool done = NO;
int lineNumber = 1;
while ( ! done ) {
try {
switch ( lineNumber ) {
case 1: line 1; ++lineNumber; // fall through
case 2: line 2; ++lineNumber; // fall through
// etc.
}
done = YES;
} catch {
}
}