2013-03-06 5 views
10

に送信されましたか? これを引き起こす原因は何か、それを修正したり、さらにデバッグする方法は何ですか?- [nsnullをobjectForKeyedSubscript:]:それは私がキーと<code>NSNull</code>オブジェクトにアクセスしようとしています</p> <p><code>-[NSNull objectForKeyedSubscript:]: unrecognized selector sent to instance</code></p> <p>言っている:認識されていないセレクタは、私が言うの例外を得たインスタンス

+1

見つけやすいでしょう。どこに添え字を付けていますか? – CodaFi

+2

あなたは何か他のことを期待していたNSNullを持っているようです。いくつかのコードは、人々がこれを理解するのを助けるでしょう。 –

+1

これを修正する方法は、NSNullオブジェクトに対してobjectForKeyedSubscriptを試行しないことです。 (私はいくつかのJSONデータを処理していて、NULL値の準備はできていないと確信しています) –

答えて

13

これを修正する方法は、NSNullオブジェクトに対してobjectForKeyedSubscriptを試行しないことです。 (私はあなたには、いくつかのJSONデータを扱うているとNULL値のために準備されていない賭けている。)

(どうやらobjectForKeyedSubscript新しいアレイ[x]は表記はに変換するものである。)

(注)

+0

無効なキーを持つ辞書にアクセスすると、この例外がスローされますか? – Boon

+1

@Boon No.これは 'nil'を返します。これはNSNullとはまったく異なります。 –

+2

@Boon - マイクDによると、無効なキーを辞書で使用すると、例外なくnilが返されます。配列の無効なインデックスは例外をスローしますが、 "認識できないセレクタ"ではなくNSRangeExceptionです。しかし、NSStringやNSViewなどの配列以外の辞書オブジェクトを「索引付け」しようとすると、「認識されないセレクタ」が表示されます。これは、指定されたクラスがサポートしていないという一般的なエラーです指定されたメソッド –

2

実行時に、NSNullを格納していて、後でobjectForKeyedSubscriptを呼び出そうとしたときに、エディタがあなたに指示する値にもかかわらず、格納する価値は何ですか。私はNSDictionaryであると予想されることについてこれが起こっていると推測しています。

NSString *str = dict[@"SomeKey"]

事前にコードの一部は、その仕事をして、そこに調査されていないか、またはいくつかの検証を実行します:ようないくつかの事

NSDictionary *dict = ...; 

if ([dict isKindOfClass:[NSDictionary class]]) { 
    // handle the dictionary 
} 
else { 
    // some kind of error, handle appropriately 
} 

は、私は頻繁に扱うシナリオのこの種を持っていますネットワーク操作からのエラーメッセージ。

1

NSNullにカテゴリを追加して、添え字を期待するのと同じ方法でこれを処理することをお勧めします。このNSNullをテストするには、==[NSNull null]と単純に比較するだけです。それがnilに送られた場合は処理されるように呼び出す。

@implementation NSNull (Additions) 

- (NSObject*)objectForKeyedSubscript:(id<NSCopying>)key { 
    return nil; 
} 

- (NSObject*)objectAtIndexedSubscript:(NSUInteger)idx { 
    return nil; 
} 

@end 

テストへの簡単な方法は、このようなものです:このカテゴリーに

id n = [NSNull null]; 
n[@""]; 
n[0]; 

、このテストが成功した/そっと処理する必要があります。

関連する問題

 関連する問題