使用requestLocation仅请求用户的位置一次

时间:2017-11-08 17:50:54

标签: ios swift swift3 cllocationmanager

我正在尝试在应用首次开放时获取用户位置一次。 (其他开口我不想知道)

我不希望用户允许。

我正在使用下面的代码,但它没有告诉我位置,它给了我错误:操作无法完成。 (kCLErrorDomain错误0。)

PS:我没有使用模拟器我正在尝试使用真实设备

代码:

df

   col
0   16
1    1
2   10
3   20
4    3
5   13
6    2
7    5
8    7

for c, g in df.groupby('col', sort=False):
      print(c)  

16
1
10
20
3
13
2
5
7

2 个答案:

答案 0 :(得分:2)

这可能无法正常工作,因为您必须请求用户对其位置的许可,即使只是一次。我担心没有办法绕过它并且应该如此。它仅在用户授权时才有效。

您需要ViewDidLoad()

manager.requestWhenInUseAuthorization()

并添加了相关的Info.plist隐私密钥:

隐私 - 使用时的位置用法说明

答案 1 :(得分:0)

我弄清楚了原因。您需要先致电请求授权,然后再请求位置。如果不要求授权,则将出现kCLErrorDomain错误0。如果在manager.requestLocation之前要求授权,则根本不会调用locationManager委托方法。您可以在需要用户位置时使用:

[self.locationManager requestWhenInUseAuthorization];
[self.locationManager requestLocation]; // Second time and beyond, didChangeAuthorizationStatus will not be called.

然后在回叫中,您可以从locationManager请求位置。

- (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status {
    if (status == kCLAuthorizationStatusDenied) {
        // The user denied authorization
    }
    else if (status == kCLAuthorizationStatusAuthorizedWhenInUse) {
        [self.locationManager requestLocation];
    }
}