私は複数の方法を試しました。辞書がNULLであることはわかっています。そこで中断すると、コンソールも出力されます。しかし、if()に入れると、トリガーされません。
([myDict count] == 0) //results in crash
(myDict == NULL)
[myDict isEqual:[NSNull null]]
私は複数の方法を試しました。辞書がNULLであることはわかっています。そこで中断すると、コンソールも出力されます。しかし、if()に入れると、トリガーされません。
([myDict count] == 0) //results in crash
(myDict == NULL)
[myDict isEqual:[NSNull null]]
ダングリングポインタまたはワイルドポインタがあるようです。
Objective-Cオブジェクトを構造体へのポインタと見なすことができます。
NULL
もちろん、それらを、または他のポインタと比較することもできます。
それで:
( myDict == NULL )
と
( myDict == [ NSNull null ] )
両方とも有効です。
最初のものは、ポインタがであるかどうかをチェックしますNULL
。通常、値が0のaNULL
として定義され
ます。Objective-Cオブジェクトの場合、通常はを使用することに注意してください。値が0のaとしても定義されているため、に等しくなります。これは、標準のポインターではなく、オブジェクトへのポインターを示すためのものです。void *
nil
nil
void *
NULL
NULL
2つ目は、のアドレスをクラスmyDict
のシングルトンインスタンスと比較します。NSNull
したがって、ここでは2つのポインター値を比較しています。
したがって、すぐに再開するには:
NULL == nil == Nil == 0
そして[ NSNull null ]
、有効なインスタンスは次のとおりです。
NULL != [ NSNull null ]
今これについて:
( [ myDict count ] == 0 )
ワイルドポインタがあるとクラッシュする可能性があります。
NSDictionary * myDict;
[ myDict count ];
ARCを使用しない限り、myDict
変数が初期化されていないため、確実にクラッシュし、実際には何かを指している可能性があります。
ダングリングポインタがある場合にもクラッシュする可能性があります。
NSDictionary * myDict;
myDict = [ [ NSDictionary alloc ] init ];
[ myDict release ];
[ myDict count ];
次に、割り当て解除されたオブジェクトにメッセージを送信しようとします。/
へのメッセージの送信は、Objective-Cでは常に有効です。nil
NULL
したがって、ディクショナリがnil
であるかどうか、またはディクショナリに値がないかどうかを確認するかどうかによって異なります(有効なディクショナリインスタンスが空である可能性があるため)。
最初のケースでは、と比較してくださいnil
。それ以外の場合は、カウントが0であるかどうかを確認し、インスタンスがまだ有効であることを確認します。たぶんあなたはどこかで保持を忘れただけです。
if (TheDict == (NSDictionary*) [NSNull null]){
//TheDict is null
}
else{
//TheDict is not null
}
辞書にnilまたはNULLデータがあるかどうかを確認するには、すべての場合に0を返す[dictionarycount]を確認します。
上記のすべては私にはうまくいきませんが、これは
if([mydict isKindOfClass:[NSNull class]])
{
NSLog("Dic is Null")
}
else
{
NSLog("Dic is Not Null")
}
私のために働いた
if([NSNull null] != [serverResponseObject objectForKey:@"Your_Key"])
{
//Success
}