0

JSON フィードを使用するアプリに取り組んでいますが、フィードが正しくないかオブジェクトが欠落している場合、アプリがクラッシュすることがわかりました。

これは現在受信しているフィードです。通常、Web サービスが動作しているときに ID を受信します。

    result =     {
        data =         {
            result =             (
                "<null>"
            );
        };
        success = 1;
    };
}:

現在、このようにフィードを解析しています

NSDictionary *results = [json objectForKeyOrNil:@"result"];
NSString *success = [results objectForKeyOrNil:@"success"];
NSDictionary *data = [results objectForKeyOrNil:@"data"];
NSDictionary *resultsArray = [data objectForKeyOrNil:@"result"];

最後に、不足しているオブジェクトを取得しようとするためにこれを行っています

NSString *test = [dictionary objectForKeyOrNil:@"id"];

そしてこの時点でアプリがクラッシュします

objectForKeyOrNil を使用しているカテゴリ クラスは、クラッシュを防ぐことを望んでいましたが、それも機能しないようです。

- (id)objectForKeyOrNil:(id)key {
    id val = [self objectForKey:key];
    if ([val isEqual:[NSNull null]]) {
        return nil;
    }

    return val;
}

受信したクラッシュ メッセージ -[NSNull objectForKeyOrNil:]: インスタンス 0x248e678 に送信された認識されないセレクター

ここで元の投稿を更新すると思ったのですが、これを行うときにIDを確認することを提案した人が何人かいましたが、それでもクラッシュします

NSDictionary *resultsArray = [data objectForKeyOrNil:@"result"];
// Loop through the downloaded data
for (NSDictionary *dictionary in resultsArray) {

    id val = [dictionary objectForKey:@"id"];
    if ([val isEqual:[NSNull null]] || val==nil) {
    }

    NSLog(@"Should be OK");

上記のコードでは、NSLog ステートメントに到達することはありません

どんな助けでも大歓迎です

ありがとうアーロン

4

4 に答える 4

2

nullかどうかに関係なく、idを確認するだけです。または、nil の代わりに空白を返すことができます。それならクラッシュしないかもしれません

- (id)objectForKeyOrNil:(id)key {
    id val = [self objectForKey:key];
    if (val ==[NSNull null]) 
    {
        return nil;
    }
    return val;
 }
于 2013-05-18T10:22:28.540 に答える
0

これがあなたを助けることを願っています。

- (id)objectForKeyOrNil:(id)akey {
    id object = [self objectForKey:aKey];
    if (object == nil ) {
        return @"";
    }
    if ([object isKindOfClass:[NSString class]) {
        return object;
    } else {
        return nil;
    }
}
于 2013-05-18T10:17:02.130 に答える