目标 C 地理位置方法不会自动返回双精度值



我正在构建一个小型应用程序,该应用程序可以从Web服务器读取一些数据,并且可以使用finde。然后我做了一个方法,它是一个空白,只从一些地址获得纬度和经度。

-(void)getLocation{

if (!self.geocoder) {
    self.geocoder = [[CLGeocoder alloc] init];
}

NSString *address = self.label1.text;

[self.geocoder geocodeAddressString:address completionHandler:^(NSArray *placemarks, NSError *error) {

    if ([placemarks count] > 0) {
        CLPlacemark *placemark = [placemarks objectAtIndex:0];
        CLLocation *location = placemark.location;
        CLLocationCoordinate2D coordinate = location.coordinate;
        latitude1 = coordinate.latitude;
        longitude1 = coordinate.longitude;
    }
}];
}

在.h文件中,我已经向变量(而不是在接口中)声明了这些:

@property double latitude1;
@property double longitude1;

然后我用一个按钮来称呼它:

 - (IBAction)find:(id)sender{
NSLog(@"Latitude1: %f og Longitude1: %f", latitude1, longitude1);

float spanX = 0.00725;
float spanY = 0.00725;
MKCoordinateRegion region;
region.center.latitude = self.latitude1;
region.center.longitude = self.longitude1;
region.span = MKCoordinateSpanMake(spanX, spanY);
[self.mapView setRegion:region animated:YES];
}

这非常好。。。。

但我不能称之为

    NSLog(@"Latitude: %f and %f",latitude1, longitude1 );

来自viewDidLoad方法。

这就像我必须在IBaction中使用它,而且我不能以任何其他方式使用latitude1和longitude1。我需要的是获取纬度和经度,并能够按照我想要的方式使用这些值,而不仅仅是按下按钮。

如果我手动按下更新按钮,它就会在地图上显示内容并显示纬度和经度,但当我在viewdidload方法中使用它时,它只显示0.00000,这是没有意义的。

我一直在思考的另一件事是如何从一个方法返回多个值,就像我想从getLocation方法返回latitude1和longitude1一样。nsdictionary或数组或结构?

您的示例代码并不完整,但以下是我的建议。

在此代码链接上设置断点:

        if ([placemarks count] > 0) {

如果GEOCODER块失败,则位置将为0。

我的猜测是,在您的viewDidLoad中,您还没有成功地对位置进行地理编码。geocodeAddressString方法是异步的。你叫它,它会立即返回。然后,在将来的某个时间,您的完成块会被调用。

它必须等待,因为地理编码过程通过您的网络连接连接到远程服务器。

如果视图控制器的viewDidLoad方法在地理代码调用完成之前被调用,那么纬度和经度变量还不会被设置。

我建议您添加一个布尔实例变量"geocodingComplete"。在完成处理程序中将其设置为TRUE。然后你就可以判断你是否有一个有效的地理编码地址。

最新更新