-1

プロジェクトでWebサービスを呼び出しています。Webサービスの結果を処理するために、サービスによって返されるものを通知するメソッドがあります。他の方法では、この値を使用してさらに処理します。

ネットワークの問題、webserivceの問題、またはxyzの理由、webserivce処理メソッドの戻り値(null)。

今、私はヌルチェックを実行する必要があります、2つのアプローチが私のために働きました

if([val isEqualToString:@"(null)"]) ...

if(!val) ...

nullのチェックに関しては多くの質問がありますが、私の概念をクリアしていません。val.lengthハンドラーメソッドが「(null)」を返すため、長さを6のようにチェックすると、長さをチェックすると言う人もいます。そして、!val私はこれがどのように機能するのかはっきりしていません。isKindOfClass[NSNullnull]をチェックすると言う人もいます...

誰でもこのヌルをわかりやすく説明してください。

nilとNilとNullの比較をしないでください...

4

1 に答える 1

1

if(!val)であるかどうかをテストしvalますnull。それはあなたが使いたいものであり、明白で単純なものでなければなりません。if(val == nil)同等です。

[val isEqualToString:@"null"]名前が示すように、文字列val「null」と等しいかどうかをテストします。これにより、確実にそうではなくなります。null

[val isKindOfClass:[NSNull class]]今のところあなたとは関係がないので、心配しないでください。

あなたが説明を求めたので編集してくださいNSNull

場合によっては、それ自体ではなく、の概念を格納できる必要があります。nilnil

nil内部に配列が必要だとします。配列をのように見せたいと思います[obj1, obj2, nil, obj3]

のような配列を宣言することはできません。[NSArray arrayWithObjects:obj1, obj2, nil, obj3, nil]引数を通過するときに、配列nilが停止することを確認したからです。これにより、配列が作成され[obj1, obj2]ますが、これは目的の配列ではありません。

では、このような状況であなたは何をしますか?配列を作成します[NSArray arrayWithObjects:obj1, obj2, [NSNull null], obj3]。これで配列にオブジェクトができましたが、この特定のオブジェクトは、システム内の全員が「null」と呼ぶことに同意したものです。実際にはnullではありません。

ここで実際に起こっているのは[NSNull null]シングルトンです。を呼び出すと[NSNull null]、の静的インスタンスが返されますNSNull[NSNull null]もう一度呼び出すと、メソッドを呼び出す場所に関係なく、同じオブジェクトが返されます。NSNullアプリの全世界にインスタンスが1つしかないため、同じアドレスにnullの意味を持たないオブジェクトが存在することはないため、nullと同等です。

ですから、私が上で言ったように、それはあなたにはまったく関係がありません。NSNull正当なObjective-Cオブジェクトが必要であるが、それを「null」にしたい場合にのみ必要です。通常NSNull、単純な文字列などよりも安全に使用@"(null)"できます。これは、その文字列の値を上書きしたり、文字列の比較を台無しにしたりする可能性があるためです。将来的には、文字列@"(null)"を同じデータ構造に格納する必要がある場合があります。 'nullオブジェクトなどを保存しています。

于 2012-07-25T06:26:26.553 に答える