4

私はグーグルマップからいくつかのデータを引き出していますが、それで何もできないようです。これが私のコードです:

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection  {

//do something with the data!
NSError *e = nil;
//parse the json data
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e];

//get the lat and long and put it into an array
locationData = [[NSMutableArray alloc] init];

NSLog(@"%@", [jsonArray objectAtIndex:0]);

}

jsonArray.countをログに記録すると、2が得られます。これは、googleがトップレベルで結果とステータスを返すため、正しいようです。しかし、オブジェクト0を取得しようとすると、クラッシュします。私がこのようなことをしようとすると、それもクラッシュします:

- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection  {

//do something with the data!
NSError *e = nil;
//parse the json data
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e];

//get the lat and long and put it into an array
locationData = [[NSMutableArray alloc] init];

for(NSDictionary* thisLocationDict in jsonArray) { 

    NSString* location = [thisLocationDict objectForKey:@"results"];
    [locationData addObject:location];
}
}

このコードを使用して、Twitterから問題なくデータを取得します。コンソールで発生するエラーは、文字列のオブジェクトを取得しようとしていることです。

-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x798a270

これがjsongoogleが送ってくれたものです:

タイプ=(地域、政治); }、{"long_name"="アッパーメリオン"; "short_name"="アッパーメリオン"; タイプ=( "administrative_area_level_3"、political); }、{"long_name"=モンゴメリー; "short_name"=モンゴメリー; タイプ=( "administrative_area_level_2"、political); }、{"long_name"=ペンシルベニア; "short_name" = PA; タイプ=( "administrative_area_level_1"、political); }、{"long_name"="アメリカ合衆国"; "short_name" = US; タイプ=(国、政治); }、{"long_name" = 19406; "short_name" = 19406; タイプ=( "postal_code"); }); "formatted_address" = "2900 Horizo​​n Dr、King of Prussia、PA 19406、USA"; ジオメトリ={場所={lat= "40.0896985"; lng = "-75.341717"; }; "location_type" = ROOFTOP; ビューポート={北東={緯度="40.09104748029149"; lng = "-75.34036801970849"; }; 南西={lat="40。

そして私が渡すURL:

http://maps.googleapis.com/maps/api/geocode/json?address=2900+Horizon+Drive+King+of+Prussia+,+PA&sensor=false

私が間違っていることについて何か考えはありますか?

4

1 に答える 1

3

Google から取得するデータとの違いは、次のようにキーで区切られていることresults, geometry, formatted_addressです。

次のようにする必要があります。

NSError *error;

NSString *lookUpString = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?address=%@&components=country:AU&sensor=false", self.searchBar.text];

lookUpString = [lookUpString stringByReplacingOccurrencesOfString:@" " withString:@"+"];

NSData *jsonResponse = [NSData dataWithContentsOfURL:[NSURL URLWithString:lookUpString]];

NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:jsonResponse options:kNilOptions error:&error];

self.locationArray = [[jsonDict valueForKey:@"results"] valueForKey:@"formatted_address"];

int total = self.locationArray.count;
NSLog(@"locationArray count: %d", self.locationArray.count);

for (int i = 0; i < total; i++)
{
    NSString *statusString = [jsonDict valueForKey:@"status"];
    NSLog(@"JSON Response Status:%@", statusString);

    NSLog(@"Address: %@", [self.locationArray objectAtIndex:i]);

}
于 2013-04-29T23:36:01.780 に答える