ios 在 viewDidLoad 时获取用户的经度/纬度
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/6016665/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Getting Longitude/Latitude of the User When the viewDidLoad
提问by Luca
My purpose is to get the longitude/latitude of the user when the view is loaded and to store the values in two variables for later calculations. I don't need to track the user location and to update it, I simply need to get his/her coordinates once. My code looks like this:
我的目的是在加载视图时获取用户的经度/纬度,并将值存储在两个变量中以供以后计算。我不需要跟踪用户位置并更新它,我只需要获取他/她的坐标一次。我的代码如下所示:
- (void)viewDidLoad {
[super viewDidLoad];
// locationManager update as location
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
CLLocation *location = [locationManager location];
// Configure the new event with information from the location
CLLocationCoordinate2D coordinate = [location coordinate];
float longitude=coordinate.longitude;
float latitude=coordinate.latitude;
NSLog(@"dLongitude : %f",longitude);
NSLog(@"dLatitude : %f", latitude);
}
In the console i keep getting this:
在控制台中,我不断收到此信息:
dLongitude : 0.000000
dLatitude : 0.000000
Can you please help me there?
你能帮我吗?
采纳答案by Vladimir
To get user's location even once you need to make locationManager
to start updating locations (you did that) and implement delegate method that manager calls when location is retrieved - you can't get location from location manager immediately.
要获取用户的位置,即使您需要locationManager
开始更新位置(您这样做了)并实现了在检索位置时管理器调用的委托方法 - 您无法立即从位置管理器获取位置。
If you don't want to track user location - just stop updating locations in that delegate method after location was fetched for the 1st time (and store it if you need it in future).
如果您不想跟踪用户位置 - 只需在第一次获取位置后停止更新该委托方法中的位置(并在将来需要时存储它)。
回答by Joey Gibson
As soon as you call [locationManager startUpdatingLocation];
your viewDidLoad method is done. You need to implement
只要您调用[locationManager startUpdatingLocation];
viewDidLoad 方法就完成了。你需要实施
-(void) locationManager: (CLLocationManager *)manager didUpdateToLocation: (CLLocation *) newLocation
fromLocation: (CLLocation *) oldLocation
and
和
- (void) locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error
which will be called by your locationManager when it gets the location, or when it fails. In both of those methods, you can call [locationManager stopUpdatingLocation]
.
当您的 locationManager 获取位置或失败时,它将被调用。在这两种方法中,您都可以调用[locationManager stopUpdatingLocation]
.
Inside the didUpdateToLocation method, you should move all your code from viewDidLoad, starting with CLLocation *location = [locationManager location];
That's where you'll get proper values.
在 didUpdateToLocation 方法中,您应该从 viewDidLoad 中移动所有代码,从CLLocation *location = [locationManager location];
那里开始,您将获得正确的值。
回答by Fred
This worked for me
这对我有用
- (void)viewDidLoad {
[super viewDidLoad];
// locationManager update as location
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
[locationManager stopUpdatingLocation];
CLLocation *location = [locationManager location];
// Configure the new event with information from the location
float longitude=location.coordinate.longitude;
float latitude=location.coordinate.latitude;
NSLog(@"dLongitude : %f", longitude);
NSLog(@"dLatitude : %f", latitude);
}
回答by Shanmugasundharam
Try this Code
试试这个代码
-(IBAction)Button:(id)sender
{
locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.distanceFilter = kCLDistanceFilterNone;
[locationManager startUpdatingLocation];
CLLocation *location = [locationManager location];
// Configure the new event with information from the location
// 使用来自位置的信息配置新事件
CLLocationCoordinate2D coordinate = [location coordinate];
NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude];
NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude];
NSLog(@"dLatitude : %@", latitude);
NSLog(@"dLongitude : %@",longitude);
UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(50, 40, 250, 50)];
UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectMake(50, 80, 200, 50)];
UILabel *myLabel1 = [[UILabel alloc] initWithFrame:CGRectMake(50, 120, 200, 100)];
myLabel.textColor = [UIColor blackColor];
myLabel1.textColor = [UIColor blackColor];
label.backgroundColor = [UIColor clearColor];
myLabel.backgroundColor = [UIColor clearColor];
myLabel1.backgroundColor = [UIColor clearColor];
[myLabel setText:latitude];
[myLabel1 setText:longitude];
label.text = @"Current Latitude And Longitude";
[self.view addSubview:label];
[self.view addSubview:myLabel];
[self.view addSubview:myLabel1];
}
回答by Dhiru
if you are getting Lat lang both (0.00 ,0.00)
如果您同时获得 Lat lang (0.00 ,0.00)
this may be solution for your ,
这可能是您的解决方案,
step 1:NSLocationAlwaysUsageDescription
or NSLocationWhenInUseUsageDescription
第 1 步:NSLocationAlwaysUsageDescription
或NSLocationWhenInUseUsageDescription
Add these two key in Info.plist
把这两个key加进去 Info.plist
step 2:And than [locationManager startUpdatingLocation];
start updating
第 2 步:然后[locationManager startUpdatingLocation];
开始更新
step 3:and you need to implement two mehthods
第 3 步:你需要实现两种方法
-(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error {
}
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
CLLocation * currentLocation = [locations lastObject];
NSLog(@"Updated Lat %f",currentLocation.coordinate.longitude);
NSLog(@"Updated Lang %f",currentLocation.coordinate.latitude);
}
of CLLocationManagerDelegate
in your ViewController interface.
的CLLocationManagerDelegate
在您的视图控制器的接口。
**step 4:**
-(void)viewDidLoad
{
[super viewDidLoad];
geocoder = [[CLGeocoder alloc] init];
manager.delegate = self;
manager.desiredAccuracy = kCLLocationAccuracyBest;
[manager requestWhenInUseAuthorization];
[manager requestAlwaysAuthorization];
[manager startUpdatingLocation];
}