8

如何获取当前位置的经纬度。如何在IOS SDK 8.0中获取当前位置的经纬度

我试试这个。使用Xcode 6.01和IOS SDK 8.0

-(CLLocationCoordinate2D) getLocation{ 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    [locationManager startUpdatingLocation]; 
    CLLocation *location = [locationManager location]; 
    CLLocationCoordinate2D coordinate = [location coordinate]; 
    return coordinate; 
} 

- (void)getCurrentLocation{  
    CLLocationCoordinate2D coordinate = [self getLocation]; 
    NSString *latitude = [NSString stringWithFormat:@"%f", coordinate.latitude]; 
    NSString *longitude = [NSString stringWithFormat:@"%f", coordinate.longitude]; 
    NSLog(@"Latitude = %@", latitude); 
    NSLog(@"Longitude = %@", longitude); 
} 


- (void)viewDidLoad{ 
    [super viewDidLoad]; 
    [self getCurrentLocation]; 

} 

在这里,我启用模拟器位置部署8.0 iPhone模拟器4s。 即使在设备上它不工作。

@ALL 请让我知道,我在这里做错了什么。

回答

0

是的,模拟器提供了过度简化的定位服务。物理设备是真正测试CLLocationManager行为的唯一方法。

问题是,当您拨打startUpdatingLocation时,这并不意味着您可以立即检索location。 (我想你会发现它要么nil或具有负horizontalAccuracy,这意味着尚未确定的位置。)

必须符合CLLocationManagerDelegate,并实现locationManager:didUpdateLocations:,这是异步调用。因此,在尝试使用位置信息之前,您必须等待调用此方法。并且,请注意,在真实设备上,随着设备精确度提高(例如,您可能会看到horizontalAccuracy号码从一个位置更新到另一个位置),您可能会看到此设备改进设备位置信息的次数。


显然,您可能也想要实施locationManager:didFailWithError:,因此可以检测到问题。在致电startUpdatingLocation之前,您可能还应该检查authorizationStatus,locationServicesEnabled,并致电requestWhenInUseAuthorization

0

看来我们需要做更多的任务来在ios8中实现位置服务。 follow this discussion

+0

加入既代表方法didFailWithError和didUpdateToLocation但这方法不触发在所有 – KkMIW 2014-10-02 16:16:25

+0

请在您的.h文件中添加CLLocationManagerDelegate,像这样@interface DemoViewController:UIViewController Samin 2014-10-03 03:13:48

+0

我添加了CLLocationManagerDel egate,我仍然有问题。升级sdk IOS 7到IOS 8后出现问题。 – KkMIW 2014-10-03 10:26:48

5

我搞清楚问题IOS 8.0

NSLocationAlwaysUsageDescription添加此手动进入应用plist文件,请将字符串值空。 这将调用委托方法。永远不会忘记添加NSLocationAlwaysUsageDescription除非你没有添加这个委托方法将无法正常工作。剩余的代码是相同的。将委托方法添加到控制器类中。

将这行代码添加到locationManager声明代码中。对于IOS 8.0 [locationManager requestAlwaysAuthorization];

3

在iOS 8中,此代码无法自动失败即,您将不会收到任何错误或警告。

你需要做两个额外的事情让位置工作:

  1. 添加键从位置管理要求它开始你的Info.plist
  2. 请求授权

需要在Info.plist文件中添加以下任意一个或两个键。

  1. NSLocationWhenInUseUsageDescription
  2. NSLocationAlwaysUsageDescription

这些是字符串类型和值的可以是任何消息描述或为空。

现在您需要为相应的位置方法请求授权。使用以下任一要求:

  1. [self.locationManager requestWhenInUseAuthorization]
  2. [self.locationManager requestAlwaysAuthorization]
+0

不错的一个.... !!节省了很多时间 – 2015-05-13 22:01:17

相关问题