-2

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);最後に一度だけ表示されます。助言がありますか?

4

1 に答える 1