didUpdateLocations未被调用

And*_*rew 4 xcode objective-c cllocationmanager ios swift

我将我的对象设置为locationManager的委托,并调用didChangeAuthorizationStatus方法,它执行此操作:

func locationManager(manager: CLLocationManager!, didChangeAuthorizationStatus status: CLAuthorizationStatus) {
    if status == CLAuthorizationStatus.AuthorizedWhenInUse {
        self.locationManager.startUpdatingLocation()
    }
}
Run Code Online (Sandbox Code Playgroud)

我也有这个方法,在这之后永远不会被调用:

func locationManager(manager: CLLocationManager!, didUpdateLocations locations: [AnyObject]!) {
    if locations.count == 0 {
        return
    }

    //Do stuff
}
Run Code Online (Sandbox Code Playgroud)

有什么想法可能没有被调用?我认为被解除分配的对象是一个选项,但是当它达到authorizationStatus方法时它也会被释放.

tim*_*son 16

这对于答案来说已经很晚了,但是当我遇到同样的问题(didChangeAuthorizationStatus被调用但没有didUpdateLocations)时,我偶然发现了这一点.当然,这不是代码相关的东西,而是我在没有位置设置的模拟器中进行测试.因此,从未找到该位置,导致didUpdateLocations从未被调用.

要解决这个问题......在模拟器中转到Debug -> Location-> <choose location>.

编辑还应该注意,locationManager:didFailWithError:如果未在模拟器中设置位置,将运行,如您所期望的那样.


ios*_*dev 5

它也可以在iOS 10iOS 11中使用,

建立财产CLLocationManager使用并添加CLLocationManagerDelegate

@property (strong, nonatomic) CLLocationManager *locationManager;
Run Code Online (Sandbox Code Playgroud)

将以下属性添加到您的info.plist文件中

Privacy - Location When In Use Usage Description
Privacy - Location Always Usage Description
Privacy - Location Usage Description
Run Code Online (Sandbox Code Playgroud)

将以下方法添加到您的.m文件中

-(void)getCurrentLocation
{
    self.locationManager = [[CLLocationManager alloc] init];
    self.locationManager.delegate=self;
    self.locationManager.desiredAccuracy=kCLLocationAccuracyBest;
    self.locationManager.distanceFilter=kCLDistanceFilterNone;
    [self.locationManager requestWhenInUseAuthorization];
    [self.locationManager startMonitoringSignificantLocationChanges];
    [self.locationManager startUpdatingLocation];
}
Run Code Online (Sandbox Code Playgroud)

调用 [self getCurrentLocation] 方法