4

サーバーからデータを取得します。私のアプリは、Sinulator とテスト デバイスの iPhone 4s では正常に動作しますが、iPod 4 で問題が発生する男性が 1 人います。彼は例外を受け取ります。

-[__NSCFString objectForKeyedSubscript:]: unrecognized selector sent to instance 0x1d263a20

私はこのデバイスを使用できないので、クラッシュがどこにあったかを知るためにコードを書きます。

 if (![dictionaryRest[@"compliments"] isEqual:[NSNull null]]) {
       NSMutableArray *array = [NSMutableArray new];
       NSMutableArray *firstArray = [NSMutableArray new];
       for (NSDictionary *dic in dictionaryRest[@"compliments"]) {
            Compliment *compl = [Compliment new];
            if (![dic[@"ID_promotions"] isEqual:[NSNull null]])
                compl.ID = [dic[@"ID_promotions"] integerValue];

したがって、最後の 2 つの文字列では、この例外がありました。これの理由は何ですか?だから私は使用する必要があることを理解しています

if ([dict objectForKey:[@"compliments"])

代わりは

if (![dict[@"compliments"] isEqual:[NSNull null]])

その他のすべての場合。

私は今テストし、IDの辞書に持っています: ここに画像の説明を入力

4

2 に答える 2

14

NSString辞書を期待する辞書にインスタンスがあります。

「それの代わりにこれを使用する」ことは問題とは何の関係もないことに注意してください。

于 2013-05-24T19:28:58.510 に答える
0

-objectForKeyedSubscript: NSDictionary オブジェクトのインスタンス メソッドです。__NSCFString objectForKeyedSubscript: 例外は、メソッド -objectForKeyedSubscript がなんらかの NSString オブジェクトで呼び出されていることを示します。したがって、基本的には、オブジェクトが実際に辞書であると安全に想定する前に、オブジェクトのクラスを適切にチェックする必要があります。

if([dic isKindOfClass:[NSDictionary class]]) 
{
    id obj = dic[@"key"];
}
于 2016-10-19T15:53:07.883 に答える