6

私はiphoneアプリの客観的なcを扱っています。

[dictionary objectForKey:@"key"]私はそのリターンを参照してください<null>。a を実行しても、if([dictionary objectForKey:@"key"] == nil || [dictionary objectForKey:@"key"] == null)このケースはキャッチされないようです。

を実行するif([[dictionary objectForKey:@"key"] isEqualToString:@"<null>"])と、プログラムがクラッシュします。

キャッチする正しい表現は何<null>ですか?

詳細 nil の if ステートメントはまだケースをキャッチしていません... 疲れすぎて何も見えないのかもしれませんが、ここに追加情報があります:

辞書は、次のような json データを含む URL を介して入力されます。

NSURL *url = [NSURL URLWithString:"http://site.com/"];

dataresult = [NSData dataWithContentsOfURL:url];

NSError *error;
NSMutableDictionary *dictionary = [NSJSONSerialization JSONObjectWithData:dataresult options:kNilOptions error:&    error];

辞書で NSLog を実行すると、次の出力が得られます。

{
    key = "<null>";
    responseMessage = "The email / registration code combination is incorrect";
}
4

3 に答える 3

12

のインスタンスがありますNSNull。実際に、シングルトンなのでインスタンスです。

Cocoa コレクションに を含めることはできませんが、存在しないものにアクセスしようとするとnil返されることがあります。nil

ただし、「何も意味しない」ものをコレクションに格納することがプログラムにとって有益な場合もあります。それNSNullがそのためです。

たまたま、JSON は null オブジェクトを表すことができます。そのため、JSON を Cocoa コレクションに変換すると、これらの null オブジェクトはオブジェクトに変換されNSNullます。

Cocoa が「%@」指定子を使用して文字列をフォーマットすると、nil値は括弧付きの「(null)」としてフォーマットされます。値は、NSNull山かっこで「<null>」としてフォーマットされます。

于 2012-06-03T23:19:39.167 に答える
3

新しい答え:

詳細を追加していただきありがとうございます。dataresult設定している " " は JSON オブジェクトではないように見えるので、生の文字列を " に入れると奇妙な結果が得られるのも不思議では[NSJSONSerialization JSONObjectWithData:]ありません。JSON 関連の何かを呼び出す前に、データに対して基本的なエラー チェックを行う必要がある場合があります。

元の答え:

まず、これが私のコードなら、私は " NSDictionary" オブジェクト " "に名前を付けませんarray(そして、あなたの編集で私のコメントを見つけたようです... 早く寝てください!)。

次に、探しているのは " nil" であり、" " という名前の文字列ではありません<null>statesに関する Apple のドキュメントのobjectForKey:ように、要求しているキーのオブジェクトが見つからない場合、nil が返されます。<null>Xcode コンソールは、出力で nil オブジェクトを " " 文字列に変換するのに役立つように努めています。

if [dictionary objectForKey: @"key"] != nil」をすれば、あなたはもっと幸せになるはずです。

于 2012-06-03T22:55:04.733 に答える
2

次のコードを使用してください。

if ([[dictionary valueForKey:@"key"] isKindOfClass:[NSNull Class]]{
   //This means that the value inside the dictionary is <null>
}
else{
//the value is not <null>
}

これでうまくいくはずです。

于 2015-02-27T21:11:03.410 に答える