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?