2012-02-23 6 views
0

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

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

が、私はこのような何かをするとき:

WebKit discarded an uncaught exception in the webView:shouldInsertText:replacingDOMRange:givenAction: delegate: * -[NSPlaceholderString initWithFormat:locale:arguments:]: nil argument

I:

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

私はこのエラーを取得しますどのように私はこれを修正することができますか?また、同じ名前の複数の場所(「スプリングフィールド」など)が存在する場合、このGoogleジオコーダは複数の場所を返すことができるため、どのキーを参照するかを選択するにはどうすればよいですか? (like "long_name"、 "lat"など)

ありがとうございます!

答えて

5

"ステータス"が機能するのは辞書のルートにあるためですが、長い名前やその他の部分はサブアレイ内のサブ辞書にあります。私が与えてくれたの例では、最初から長い名前を取得する方法を示しています - あなたはもちろん、ループを設定する必要があります聞い下のすべての値を取得したい場合は

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"]; 

:代わりにこのような何かを試してみてください最初の結果内のアドレスが返されます。

+0

これはうまくいきました。「NSDictionary」が 'objectAtIndex:'に応答しないので、 'NSArray'オブジェクトに対して' results'を変更しなければならなかったのは唯一変更しなければならなかったことです。ご協力いただきありがとうございます! –

+0

エラー - コピー/貼り付けエラーです。私は私の応答でそれを修正しました –

関連する問題