JSON を使用してオートコンプリート アドレスの提案を作成しようとしています。私が直面している問題は、ユーザーの入力から緯度と経度を取得できることですUISearchDisplay
。ただし、このデータをアドレス名に解析しようとしています。Apple のリバース ジオコーディングを使用しようとしましたが、成功しませんでした。受け取っている値は 1 つだけです。すぐに Apple ジオコーディングを使用しましたが、結果は期待したものではありませんでした。コードは次のとおりです。
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString{
NSError *error;
NSString *lookUpString = [NSString stringWithFormat:@"http://maps.googleapis.com/maps/api/geocode/json?address=%@&sensor=true", 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:@"geometry"] valueForKey:@"location"];
int total = self.locationArray.count;
for (int i = 0; i < total - 1; i++)
{
NSLog(@"locationArray count: %d", self.locationArray.count);
NSArray *localLocations;
localLocations = [self.locationArray objectAtIndex:i];
NSLog(@"%d",i);
NSString *latitudeString = [localLocations valueForKey:@"lat"];
NSString *longitudeString = [localLocations valueForKey:@"lng"];
NSLog(@"LatitudeString:%@ & LongitudeString:%@", latitudeString, longitudeString);
NSString *statusString = [jsonDict valueForKey:@"status"];
NSLog(@"JSON Response Status:%@", statusString);
double latitude = 0.0;
double longitude = 0.0;
latitude = [latitudeString doubleValue];
longitude = [longitudeString doubleValue];
CLLocation *location = [[CLLocation alloc] initWithLatitude:latitude longitude:longitude];
[self.geocoder reverseGeocodeLocation:location completionHandler:^(NSArray *placemarks, NSError *error){
[[self placemarks] addObject:placemarks];
NSLog(@"PLACEMARKS %d", self.placemarks.count);
}];
}
NSLog(@"Mutable array %d", self.placemarks.count);
[self.searchDisplayController.searchResultsTableView reloadData];
return NO;
}
タスクのNSLog(@"PLACEMARKS %d", self.placemarks.count);
最後に一度だけ表示されます。助言がありますか?