API等の結果をJSONパース等でNSDictionaryに格納した時に値が無いケースだとnilではなくNSNullオブジェクトがセットされる。(NSDictionaryにはオブジェクトしかセット出来ないため)この結果をアプリケーション側で利用する時にNSDictionaryが入れ子になっている場合以下の様なコードはエラーとなる。objectForKey:@"key2"]これはhogeをNSDictionaryと想定しているが値がないためNSNullが設定されておりNSNullに対してobjectForKey:が送られ、そのようなメソッドが無いために発生する。アプリケーション中で毎回nullチェックをするのがつらい場合は以下のようにforwardInvocation:メソッドをオーバーライドする事で回避出来る。forwardInvocation:をオーバーライドする場合にはmethodSignatureForSelector:も実装する必要がある。これはNSInvocationだけではメソッドシグネチャ(戻り値や引数の型)が判断出来ないため、アプリ側で設定する必要があるためと思われる。処理の概要としては1.あるインスタンスに対して存在しないメッセージが送信される。2.メソッドが存在しない場合、まずmethodSignatureForSelector:が呼ばれる。3.つづいてforwardInvocation:が呼ばれ、適当な処理を行う。0;}NSNullクラスに対してcategoryを作成する等して上記2メソッドを実装する。methodSignatureForSelectorに関してはnil以外の値をNSMethodSignatureにセットして返却すれば良い(実際この値は使用されないのでダミーとなる)そして、forwardInvocation:のなかでrespondsToSelector:でメソッドが存在しない場合は空振り(何もしない)ようにしておく。する事でエラーになるのを回避出来る。ちなみに、methodSignatureに設定しているC文字列の"@@:"は以下の様なルールで記述する最初の@は戻り値の型を表している。次は暗黙の引数が二つ。一つ目はメソッドを実行するオブジェクト、もう一つはメソッドのセレクタとなる。上記の"@@:"は何らかのオブジェクトを返す引数無しのメソッドと言う事になる。今回は空振りさせる事が目的なので何でも良かったが、何らかの処理を振り分ける様な用途で使用する場合には、ここで設定したシグネチャと呼び出すメソッドがずれているとエラーになるので注意が必要。