Objective-C Language
Обработка ошибок
Поиск…
Синтаксис
- NSAssert (условие, fmtMessage, arg1, arg2, ... ) (аргументы курсивом являются необязательными) - утверждает, что условие оценивает истинное значение. Если это не так, как утверждение будет вызывать исключение (NSAssertionException), с fmtMessage, отформатированным с предоставленными аргументами
Утверждая
@implemenetation Triangle
...
-(void)setAngles:(NSArray *)_angles {
self.angles = _angles;
NSAssert((self.angles.count == 3), @"Triangles must have 3 angles. Array '%@' has %i", self.angles, (int)self.angles.count);
CGFloat angleA = [self.angles[0] floatValue];
CGFloat angleB = [self.angles[1] floatValue];
CGFloat angleC = [self.angles[2] floatValue];
CGFloat sum = (angleA + angleB + angleC);
NSAssert((sum == M_PI), @"Triangles' angles must add up to pi radians (180°). This triangle's angles add up to %f radians (%f°)", (float)sum, (float)(sum * (180.0f / M_PI)));
}
Эти утверждения гарантируют, что вы не дадите треугольник неправильным углам, выбросив исключение, если вы это сделаете. Если они не выбрасывают исключение, чем треугольник, а вовсе не настоящий треугольник, могут возникнуть некоторые ошибки в более позднем коде.
Обработка ошибок и исключений с помощью блока catch try
Исключения представляют ошибки на уровне программистов, такие как попытка получить доступ к элементу массива, которого не существует.
Ошибки - это проблемы на уровне пользователя, такие как попытка загрузить файл, который не существует. Потому что ошибки ожидаются при нормальном выполнении программы.
Пример:
NSArray *inventory = @[@"Sam",
@"John",
@"Sanju"];
int selectedIndex = 3;
@try {
NSString * name = inventory[selectedIndex];
NSLog(@"The selected Name is: %@", name);
} @catch(NSException *theException) {
NSLog(@"An exception occurred: %@", theException.name);
NSLog(@"Here are some details: %@", theException.reason);
} @finally {
NSLog(@"Executing finally block");
}
ВЫХОД:
Исключено: исключение NSRangeException
Вот некоторые подробности: *** - [__ NSArrayI objectAtIndex:]: индекс 3 за пределами границ [0 .. 2]
Выполнение блока finally