Objective-C Language
エラー処理
サーチ…
構文
- NSAssert(条件、fmtMessage、 arg1、arg2、... )(イタリック体のargsはオプションです) - 条件が真の値であると評価します。それがアサーション以外の場合は、提供されたargsでフォーマットされたfmtMessageで例外(NSAssertionException)が発生します
アサーション
@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)));
}
これらのアサーションは、誤った角度の三角形を与えないようにします。真の三角形ではなく、三角形以外の例外をスローしなかった場合、後のコードでいくつかのバグが発生する可能性があります。
try catchブロックによるエラーと例外の処理
例外は、存在しない配列要素にアクセスしようとするような、プログラマレベルのバグを表します。
エラーは、存在しないファイルをロードしようとするようなユーザーレベルの問題です。プログラムの通常の実行中にエラーが予想されるためです。
例:
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を超えるインデックス3 [0 .. 2]
最終ブロック実行中
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow