0

http://maps.googleapis.com/maps/api/geocode/json?address=canada&sensor=trueから JSON データを取得し、それを NSDictionary オブジェクトに格納する iPhone アプリを作成しています。私のコードは正常にコンパイルされ、JSON データは有効です。ただし、特定のキーを探すと、キーが存在し、タイプミスをしていないにもかかわらず、nil が返されます。これが機能する唯一のキーです (フィードは NSDictionary オブジェクトです)。

NSString *status = [[NSString alloc] initWithFormat:[feed objectForKey:@"status"]];

しかし、私がこのようなことをすると:

NSString *longName = [[NSString alloc] initWithFormat:[feed objectForKey:@"long_name"]];

次のエラーが表示されます。

WebKit は、webView:shouldInsertText:replacingDOMRange:givenAction: delegate: * -[NSPlaceholderString initWithFormat:locale:arguments:]: nil 引数でキャッチされていない例外を破棄しました

2 つの質問があります。これを修正するにはどうすればよいですか? また、この Google Geocoder は、同じ名前の場所 (つまり "Springfield") が複数存在する場合に複数の場所を返すことができるため、どのキーを参照するかをどのように選択すればよいでしょうか? (どの「long_name」、どの「lat」など…)

前もって感謝します!

4

1 に答える 1

7

「ステータス」が機能する理由は、それが辞書のルートにあるのに対し、長い名前と他のほとんどの部分はサブ配列内のサブ辞書にあるためです。代わりに次のようにしてみてください。

NSArray *results = [feed objectForKey:@"results"];
NSDictionary *firstResult = [results objectAtIndex:0];
NSArray *addressComponents = [firstResult objectForKey:@"address_components"];
NSDictionary *firstAddress = [addressComponents objectAtIndex:0];
NSString *longName = [firstAddress objectForKey:@"long_name"];

ヒアの下のすべての値を取得したい場合は、もちろんループを設定する必要があります。私が示した例は、返された最初の結果内の最初のアドレスから長い名前を取得する方法を示しています。

于 2012-02-24T00:16:04.110 に答える