こんにちは、TouchJSON を使用して JSON を逆シリアル化しています。私は過去にそれを使用しており、その際、NSNull の発生を手動で処理していました。作者もこれに対処しなければならないと思うので、もう一度それを行うのはオーバーヘッドになります。その後、ドキュメントでこれを見つけました:
出力で NSNull 値を回避します。
NSData *theJSONData = /* some JSON data */
CJSONDeserializer *theDeserializer = [CJSONDeserializer deserializer];
theDeserializer.nullObject = NULL;
NSError *theError = nil;
id theObject = [theDeserializer deserialize:theJSONData error:&theError];}
私が理解している方法では、クラスのユーザーは C スタイルの null ポインターをデシリアライザーに渡すことができ、NSNull に遭遇すると、渡された値 (NULL) が挿入されます。そのため、後で値を使用すると、NSNull ではなく NULL が返されます。
これは奇妙に思えます。戻り値は、オブジェクトのみを含むことができる NSDictionary です。代わりに値のデフォルトを「nil」にすべきではありませんか?
NULL の場合、このように値を確認できますか?
if([jsonDataDict objectForKey:someKey] == NULL)
これを行うことができる方がより論理的に見えるでしょう:
if(![jsonDataDict objectForKey:someKey])
nil を渡すことは許可されていますが、NULL を渡すとクラッシュが発生するすべてのケースは言うまでもありません。
または、「nil」をデシリアライザーに渡すことはできますか?
これの多くは、私がまだ nil、NULL、[NSNULL null] に苦労していることに起因しています。おそらく、nil を使用する際の潜在的な警告を認識していないのでしょう。