CLLocationManager代理不调用问题

2019-08-27  本文已影响0人  生命不止运动不息

今天特别奇怪,调用使用CLLocation 获取设备方向,但delegate方法死活不走。
原代码如下:

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    CLLocationManager *lm = [[CLLocationManager alloc] init];
    lm.delegate = self;
    lm.headingFilter = 1;
    [lm startUpdatingHeading];
}

百思不得其解。最后想想可能是以为CLLocationManager变量的问题,因为以前就遇到过,如果某个变量是局部的,就会被无情释放。然后 使用一个成员变量持有了CLLocationManager的变量。这次就回调了。

原因:CLLocationManager *lm ,这里声明的lm 是局部变量,当viewDidLoad执行完,就会被释放了。导致不回调。

修复后代码
//_locationManager 是成员变量

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    CLLocationManager *lm = [[CLLocationManager alloc] init];
    _locationManager = lm;
    lm.delegate = self;
    lm.headingFilter = 1;
    [lm startUpdatingHeading];
}
上一篇下一篇

猜你喜欢

热点阅读