NSExceptionクラス
INDEX>Foundation>NSException
解説
例外処理に関するクラスです。
継承 | NSObject |
準拠 | NSCoding |
NSCopying | |
NSObject (NSObject) | |
フレームワーク | /System/Library/Frameworks/Foundation.framework |
使用可能 | Mac OS X v10.0以降 |
iOS 2.0以降 | |
定義 | NSException.h |
概要
例外を表すクラスです。Cbjective-Cでは積極的に例外を使用することはありません。基本的に例外が出ないようにプログラムを組むことになります。
例外オブジェクトの作成と発生
例外オブジェクトを作成するには(+ exceptionWithName:reason:userInfo)メソッドを使用します。
#pragma mark - (IBAction)button001:(id)sender { NSException *exception = [NSException exceptionWithName:@"An Exception" reason:@"reason" userInfo:nil]; [exception raise]; }
作成した例外オブジェクトの例外を発生させるには(– raise)メソッドを使用します。指定した名前とフォーマット文字列からなるメッセージで例外を発生させるには(+ raise:format)メソッドを使用します。allocで作成した例外オブジェクトを初期化するには(– initWithName:reason:userInfo)メソッドを使用します。
例外を発生させる
#pragma mark - (IBAction)button002:(id)sender { [NSException raise:@"exception name" format:@"format %@",@"aaa", nil]; }
名前と、va_listで引数を渡したフォーマット文字列からなるメッセージで例外を発生させるには(+ raise:format:arguments)メソッドを使用します。
va_listで引数を渡す。
#pragma mark va_list dynamicArgument(int arg_num , ...) { va_list args; int p , count; if (arg_num < 1) return nil; va_start(args , arg_num); printf("項目数 = %d\n" , arg_num); for (count = 0 ; count < arg_num ; count++) { p = (int)va_arg(args , int *); printf("第%d引数 = %d\n" , count + 2 , p); } va_end(args); return args; } - (IBAction)button003:(id)sender { va_list vList; vList = dynamicArgument(5 , 10 , 20 , 30 , 40,100); [NSException raise:@"errName" format:@"%d,%d,%d,%d,%d" arguments:vList]; }
例外オブジェクトの情報
例外オブジェクトが含む、名前を取得するには(– name)メソッドを使用します。
例外オブジェクトが含む、例外の理由を取得するには(– reason)メソッドを使用します。例外オブジェクトが含む追加情報を取得するには(– userInfo)メソッドを使用します。
スタックフレームの例外の取得
例外オブジェクトが含む関数呼び出しのスタックの配列を取得するには(– callStackReturnAddresses)メソッドを使います。シンボルも付加して取得するには(– callStackSymbols)メソッドを使用します。
callStackSymbolsで取得したシンボルを表示させた例
0 CoreFoundation 0x014b403e __exceptionPreprocess + 206 1 libobjc.A.dylib 0x00eb4cd6 objc_exception_throw + 44 2 CoreFoundation 0x0145ca48 +[NSException raise:format:arguments:] + 136 3 NSException 0x000034bf -[OOOViewController button003:] + 207 4 CoreFoundation 0x014b5e99 -[NSObject performSelector:withObject:withObject:] + 73 5 UIKit 0x0001a14e -[UIApplication sendAction:to:from:forEvent:] + 96 6 UIKit 0x0001a0e6 -[UIApplication sendAction:toTarget:fromSender:forEvent:] + 61 7 UIKit 0x000c0ade -[UIControl sendAction:to:forEvent:] + 66 8 UIKit 0x000c0fa7 -[UIControl(Internal) _sendActionsForEvents:withEvent:] + 503 9 UIKit 0x000c0266 -[UIControl touchesEnded:withEvent:] + 549 10 UIKit 0x0003f3c0 -[UIWindow _sendTouchesForEvent:] + 513 11 UIKit 0x0003f5e6 -[UIWindow sendEvent:] + 273 12 UIKit 0x00025dc4 -[UIApplication sendEvent:] + 464 13 UIKit 0x00019634 _UIApplicationHandleEvent + 8196 14 GraphicsServices 0x0139eef5 PurpleEventCallback + 1274 15 CoreFoundation 0x01488195 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53 16 CoreFoundation 0x013ecff2 __CFRunLoopDoSource1 + 146 17 CoreFoundation 0x013eb8da __CFRunLoopRun + 2218 18 CoreFoundation 0x013ead84 CFRunLoopRunSpecific + 212 19 CoreFoundation 0x013eac9b CFRunLoopRunInMode + 123 20 GraphicsServices 0x0139d7d8 GSEventRunModal + 190 21 GraphicsServices 0x0139d88a GSEventRun + 103 22 UIKit 0x00017626 UIApplicationMain + 1163 23 NSException 0x00002791 main + 161 24 NSException 0x000026e5 start + 53
適合するプロトコル
メソッド
NSExceptionオブジェクトの作成と起動
+ exceptionWithName:reason:userInfo
+ raise:format
+ raise:format:arguments
– initWithName:reason:userInfo
– raise
NSExceptionオブジェクトの内容
例外スタックフレームを得る
– callStackReturnAddresses
例外オブジェクトにこのメソッドを送信することで、スタック上のすべての関数の戻りアドレスをさすNSNumberの配列(NSArray)が得られる。
– callStackSymbols
例外が作成されたときのスタック上のすべての関数、メソッド名が得られる。
サブクラス化の注意