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

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-30 19:56:18  来源:igfitidea点击:

Getting Longitude/Latitude of the User When the viewDidLoad

ioscore-location

提问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 locationManagerto 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:NSLocationAlwaysUsageDescriptionor NSLocationWhenInUseUsageDescription

第 1 步:NSLocationAlwaysUsageDescriptionNSLocationWhenInUseUsageDescription

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 CLLocationManagerDelegatein 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];


}