Objective C geoLocation 方法不会自动返回双精度值

Posted

技术标签:

【中文标题】Objective C geoLocation 方法不会自动返回双精度值【英文标题】:Objective C geoLocation method doesn't return double value automatically 【发布时间】:2015-04-04 23:36:02 【问题描述】:

我正在构建一个从网络服务器读取一些数据的小型应用程序,它可以正常工作。然后,我制作了一种无效的方法,只能从某个地址获取纬度和经度。

-(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 还是数组还是结构体?

【问题讨论】:

【参考方案1】:

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

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

        if ([placemarks count] > 0) 

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

【讨论】:

这是返回的内容:latitude1 double 0 0 longitude1 double 0 0 所以看起来在断点处该块没有从 geoCoder 获得任何东西【参考方案2】:

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

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

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

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

【讨论】:

应该在哪里添加布尔值?

以上是关于Objective C geoLocation 方法不会自动返回双精度值的主要内容,如果未能解决你的问题,请参考以下文章

Phonegap Geolocation:如果应用程序关闭,则跟踪位置

如何在 Objective-C 中要求用户接受或拒绝 WKWebView 网站的 cookie

Objective-C - 给定一个 UINib 实例,我如何初始化我的自定义 UIView?

ExtJS经典工具包的Geolocation用法

Geolocation-WatchPosition 尚未实现

使用 Geolocation 插件编译时出错