hachinoBlog

hachinobuのエンジニアライフ

Objective-CのNull判定

あるサイトのAPIのレスポンスデータ(JSON)にNullが含まれていて、そのデータをCoreDataに挿入する際にNull判定の仕方を間違えていてエラーが発生した。
nilとNullの違いをきちんと分かっていなかったのが原因。
エラーが起きたのはNull判定を下記のようにやっていた。

  NSString *str = [responseDic objectForKey:@"title"]; //文字データが入ると想定されていたが<null>データが格納された
  //strがNullじゃないかつ1文字以上であればOK
  if (str != nil && [str length] > 0) { 
        //CoreDataに挿入する
  } 

これだとstr != nilの条件はパスされ、lengthメソッドの部分でエラーとなる。
(Nullに対してlengthメソッドを呼ぶ事になるので。)
正しいNull判定は

  if (str != [NSNull null] && [str length] > 0) { 
    //CoreDataに挿入する
  } 

としてやらないといけない。
NSNullクラスのクラスメソッドnullを呼び出す事で判定対象のオブジェクトを取得できる。
ちなみに返されるオブジェクトは定数オブジェクトのよう。(シングルトン)