14

以下は、ディクショナリが null かどうかをテストし、そうでない場合は正しいオブジェクトを取り出すコード ブロックです。ifただし、何らかの理由で、チェックが失敗したにもかかわらず、コードは引き続き実行されます。NSNull私が理解できない仕組みの癖はありますか、それともこれは Apple のバグですか?

if (svcUser && !(svcUser == (id)[NSNull null])) {
    return [svcUser objectForKey:@"access_level"];
}

コンソールの応答:

(lldb) print svcUser && !(svcUser == (id)[NSNull null])
(bool) $0 = false
(lldb) continue
-[NSNull objectForKey:]: unrecognized selector sent to instance 0x2b51678
4

4 に答える 4

31

以下を確認するだけです。

svcUser == [NSNull null]

これは、Apple がドキュメントで言及しているアプローチです。

于 2013-12-03T15:36:46.517 に答える
20

NSNullクラスです。また、すべてのクラスと同様に、2 つのオブジェクトが同じ値を表しているかどうかを確認するisEqual:のではなく、 を使用する必要があります。==

if (svcUser && ![svcUser isEqual:[NSNull null]]) {
    return [svcUser objectForKey:@"access_level"];
}
于 2013-05-17T02:10:11.440 に答える
8

次を使用して確認できます。

 if(![svcUser isKindOfClass:[NSNull class]]){
    return [svcUser objectForKey:@"access_level"];
}
于 2013-05-17T02:15:27.807 に答える