iOSアプリ開発でNSErrorの情報を出力する拡張NSLogを定義する方法

今回はNSLogを拡張して、NSErrorの情報を出力する識別子の定義方法を紹介する。

わざわざ新しい識別子を定義しなくても、NSErrorの情報をログに出力することは可能であるが、記述が少々長くなってしまう。
今回紹介する方法を用いれば、NSErrorの変数を直接引数に指定することができ、簡潔に記述することが出来る様になる。

<方法概要>
PCHファイル(<プロジェクト名-Prefix.pch>)に拡張したログを定義する。

(注意)
PCHファイルはXcode6から自動で生成されなくなった。
手動で作成する方法は「Xcode6でPCHファイルを追加する方法」を参照のこと。


<方法詳細>
PCHファイルに下記の定義を追加する。

#define ErrLog(error) NSLog(@"\n--- error detail ---\ndomain:%@\ncode:%ld\n%@\n", [error domain],(long)[error code],[[error userInfo] description])

解説:
「ErrLog」という識別子をNSLogを拡張して定義している。
先頭に「--- error detail ---」という文言を出力し、その後、「ドメイン」「コード」「ユーザ情報」を改行(\n)を挟みながら順に出力している。


<使用方法>
NSErrorの情報をログ出力する際は「ErrLog」を使用して行う。
サンプルコードを下記に示す。

//↓↓↓ 「ErrLog」の動作を確認するため「NSError」を手動で初期化している ↓↓↓

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
[dic setObject:@"abcde" forKey:@"key1"];
[dic setObject:@"fghij" forKey:@"key2"];
    
NSError *error = [NSError errorWithDomain:@"ドメイン" code:-100 userInfo:dic];

//↑↑↑ 「ErrLog」の動作を確認するため「NSError」を手動で初期化している ↑↑↑
    
ErrLog(error);   //←ポイント


<実行結果>

2014-12-08 19:04:17.721 ErrLogSample[13022:80656] 
--- error detail ---
domain:ドメイン
code:-100
{
    key1 = abcde;
    key2 = fghij;
}

Enjoy Programing!!

<関連記事>
iOSアプリ開発でログにクラス名とメソッド名を出力する方法
iOSアプリ開発でログにログレベルを導入する方法
iOSアプリ開発でNSErrorの情報を出力する拡張NSLogを定義する方法(本記事)

<お勧め書籍>

詳解 Objective-C 2.0 第3版
iOSアプリ開発技術者として仕事をするのであれば、必ず読んでおくべき書籍である。
筆者も何度も繰り返し精読している。