0

jsonを使用してサーバーからデータを取得しています。URL がヒット応答を受信して​​いることが確認され、json からフェッチされたすべての値がコンソールに出力されます。しかし、ディクショナリと配列で試してみると、どちらもブレークポイントによって null 値が表示されますが、データがフェッチされたことを示すコンソールに出力されます。以下はコードです。

NSString *urlStr = [NSString stringWithFormat:@"http://server39.pivbfg.com/360ads/apps/ads/%@/android/1360/ord0.9109502528132325?json=1&package_url=%@",self.mStrPid, base64String];

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:
                            [NSURL URLWithString:
                             [urlStr stringByAddingPercentEscapesUsingEncoding:
                              NSUTF8StringEncoding]]];
NSLog(@"req-------------%@",request);

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

NSDictionary *json_dict = [json_string JSONValue];
NSLog(@"json_dict\n%@",json_dict);
NSLog(@"json_string\n%@",json_string);
NSMutableArray *arrAds = [[NSMutableArray alloc]init];
arrAds = [json_dict valueForKey:@"ads"];

リクエストは順調です。json_string は問題ありません。ただし、json_dict はコンソールに値を出力しますが、ブレークポイントで null を表示します。この理由は何でしょうか。1 つのことは、私が ARC を使用していることです。これはこのコードに影響しますか。以上をご案内いたします。

これはエラーです: * キャッチされない例外 'NSUnknownKeyException' が原因でアプリを終了しています。 0xb5012 0x13a9e7e 0x13dfb1 0xe565ed 0xdc28db 0xdc288d 0x613d 0x3d1707 0x3d1772 0x320915 0x320caf 0x320e45 0x329e57 0x5942 0x2ed697 0x2edc87 0x2eee8b 0x3001f5 0x30112b 0x2f2bd8 0x2202df9 0x2202ad0 0x2abf5 0x2a962 0x5bbb6 0x5af44 0x5ae1b 0x2ee6ba 0x2f053c 0x544d 0x2b65 0x1) libc++abi.dylib: terminate called throwing an exception

編集されたコード

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSUTF8StringEncoding];

    NSError *error;
    NSData *jsonData = [json_string dataUsingEncoding:NSUTF8StringEncoding];
    NSDictionary *results = [NSJSONSerialization JSONObjectWithData:jsonData options:0 error:&error];

NSLog(@"results\n%@",results);
NSMutableArray *arrAds = [[NSMutableArray alloc]init];
arrAds = [results valueForKey:@"ads"];
NSLog(@"dict-------------%@",arrAds);

現在、同じ問題が配列 arrAds で発生しています。コンソールに値を出力していますが、空です。

4

1 に答える 1

0

このエラーは、JSON から取得しているプロパティが辞書ではなく文字列であることを示しています。json_string有効な JSON オブジェクトが含まれていないようです。

あなたの例では、あなたも漏れています:

NSMutableArray *arrAds = [[NSMutableArray alloc]init];
arrAds = [json_dict valueForKey:@"ads"];

NSMutableArray次の行で新しいオブジェクトを同じ変数に割り当てるためにのみ、新しいオブジェクトを作成します。また、返されるオブジェクトは変更不可能なバージョンではありません。次のように置き換えることができます。

NSMutableArray *arrAds = [[json_dict objectForKey:@"ads"] mutableCopy];  
于 2013-02-12T10:53:23.637 に答える