我无法获得当前位置。当我在不同的地方启动我的应用程序时,App可以获得最后的位置。但我不想最后的位置。如果您关闭应用并重新启动它,现在应用可以获取当前位置。即使首次启动应用程序,我怎样才能获得当前位置?
- (void)viewDidLoad
{
[super viewDidLoad];
[locationManager startUpdatingLocation];
self.mapView.delegate = self;
[self.mapView setShowsUserLocation:YES];
locationManager.delegate=self;
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate=self;
locationManager.desiredAccuracy=kCLLocationAccuracyBest;
locationManager.distanceFilter=kCLDistanceFilterNone;
location = [locationManager location];
CLLocationCoordinate2D coord;
coord.longitude = location.coordinate.longitude;
coord.latitude = location.coordinate.latitude;
lat = coord.latitude;
longt = coord.longitude;
}
答案 0 :(得分:8)
在设置其委托
之前,您正在执行[locationManager startUpdatingLocation];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate=self;
locationManager.desiredAccuracy=kCLLocationAccuracyBest;
locationManager.distanceFilter=kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
并实现其委托方法
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
{
}
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error
{
}
答案 1 :(得分:2)
要获取当前位置及其坐标,您只需在viewDidLoad
方法中执行此操作:
- (void)viewDidLoad {
[super viewDidLoad];
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
[locationManager startUpdatingLocation];
}
关于更新位置,请使用以下方法:
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation{
// your code here...
}
答案 2 :(得分:0)
您应该阅读Location Awareness Programming Guide。
中提供的文档具体来说,当您要求当前位置时,系统会立即返回上一个已知位置,以便您可以使用它做一些有用的事情。如果您不关心过去的位置,则可以通过查看返回的CLLocation
的{{3}}属性来丢弃它并仅使用更新的位置信息,以确定其最近的位置。
答案 3 :(得分:0)
您应该阅读CLLocationManager
文档。
您正在做的Wat将无法工作,因为确定设备位置需要一些时间。
因此,您需要等到CLLocationManager
通知您某个位置已被阻止。
您需要实施CLLocationManagerDelegate
,它会告诉您某个位置是否有效还是位置确定失败。
此外,您还应该检查位置是否可以阻止:
if ([CCLocationManager locationServicesEnabled]) {
// The location services are available.
}
您还应该检查是否授权您使用位置服务[CCLocationManager authorizationStatus]
。