В Objective-C NSAssertion
используется для двойной проверки допущений, сделанных в своем коде - утверждение должно завершиться неудачей только потому, что вы допустили ошибку в своем коде, а не из-за недопустимых аргументов или непредвиденных условий.*
NSException
используется для таких вещей, как недопустимые аргументы и т. Д. И, следовательно, лучше подходит для того, о чем вы говорите (но вне тестирования это не стандартная практика для @catch
* NSException
и продолжения выполнения: вместо этого вы бы просто сделали несколько отчетов об ошибках перед завершением).
Вот как вы будете использовать NSException
в вашей ситуации.Сначала измените someMethod:
следующим образом:
- (void) someMethod:(NSString*)param {
if (param == @"0") {
[NSException raise:@"Invalid param value" format:@"param of 0 is invalid"];
}
// more code
}
Затем, когда вы позвоните someMethod:
@try {
[yourObject someMethod:@"0"];
}
@catch (NSException *exception) {
NSLog(@"main: Caught %@: %@", [exception name], [exception reason]);
}
@finally {
//any code that should be executed whether or not the exception is raised
}
На основании вашего комментария, я думаю, вы захотите установить какой-то видфлаг в блоке @catch
, и если флаг не установлен (т. е. исключение не было выброшено), то завершается.
PS Точно так же, как вы знаете, для ситуаций, когда вы хотите реагировать на ошибкиво время обычного выполнения программы (в отличие от тестирования) NSError
более идиоматично.