CLGeocoder在NSString中返回(null)但在NSLog中不返回

时间:2014-01-27 00:03:36

标签: ios objective-c objective-c-blocks cllocation clgeocoder

我遇到问题CLGeocoder,如果我尝试使用CLGeocoder获取地址名称,并且用户当前坐标正确返回{{1}中的地址名称,邮政编码,状态等{1}}但是,如果我尝试在NSLog [包含在NSString中发送这些信息,但我不认为这是问题],则会返回NSMutableArray值。我怀疑这个问题是由我在代码中使用的块引起的,但我不确定,而且我不知道如何解决这个问题。

这是我的代码:

(null)

一张照片: enter image description here

有人可以帮我这个吗?如果发布的代码不足以让您理解问题,我会粘贴更多行。

由于

2 个答案:

答案 0 :(得分:0)

您正在执行地理编码块之前创建字符串。它应该是这样的:

- (NSArray *)dataArrayPosizione
{
    if (self.arrayPosizione == nil)
    {

        reverseGeocoder = [[CLGeocoder alloc] init];

        locationToReverseGeocode = [[CLLocation alloc]initWithLatitude:self.mapView.userLocation.location.coordinate.latitude longitude:self.mapView.userLocation.location.coordinate.longitude];

        [reverseGeocoder reverseGeocodeLocation:locationToReverseGeocode completionHandler:^(NSArray *placemarks, NSError *error)
        {
            informazioniPosizione = [NSMutableArray new];

            if (placemarks && placemarks.count > 0)
            {
                placemark = placemarks[0];

                NSLog(@"\n%@ %@\n%@, %@, %@\n%@", [placemark subThoroughfare],[placemark thoroughfare], [placemark locality], [placemark administrativeArea], [placemark postalCode], [placemark country]);

                [informazioniPosizione addObject:[NSString stringWithFormat:@"Indirizzo: %@", [placemark country]]];
                [informazioniPosizione addObject:[NSString stringWithFormat:@"Latitudine: %g\u00B0\nLongitudine: %g\u00B0", self.mapView.userLocation.location.coordinate.latitude, self.mapView.userLocation.location.coordinate.longitude]];

            }

            self.arrayPosizione = informazioniPosizione;

            return self.arrayPosizione;
        }];

    }

}

答案 1 :(得分:0)

CLGeocoder的块将异步执行,因此当您尝试使用它时,尚未设置地标变量。像bachonk建议的那样,在地理编码器的块内移动代码。将地标的信息添加到数组后,您只需在tableView上调用-[UITableView reloadData]即可显示信息。