CLLocationManager不能一直工作(iOS 8,Xcode 6)

use*_*226 8 xcode objective-c cllocationmanager cllocation ios

委托方法基本上是一半的时间

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;
Run Code Online (Sandbox Code Playgroud)

完全没有被召唤.但另一半时间它完美运作!我发现它通常发生在我关闭并退出它之后第一次启动Xcode时,但之后在那之后或者几次运行之后它似乎工作正常.我不是100%肯定,如果它只是一个Xcode问题或什么,我很快就会得到开发人员的许可证,所以我会看看它是否能在实际设备上正常工作.

从viewDidAppear开始(在viewDidLoad中尝试也没有区别),我运行一个方法来初始化我的locationManager东西:

locationManager = [[CLLocationManager alloc]init];

[locationManager setDelegate:self];
locationManager.distanceFilter = 20.0f;
locationManager.desiredAccuracy = kCLLocationAccuracyBest;
locationManager.pausesLocationUpdatesAutomatically = NO;

if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)])
    [locationManager requestAlwaysAuthorization];

[locationManager startUpdatingLocation];
Run Code Online (Sandbox Code Playgroud)

有时候这种方法有效,有时则不然.我甚至做了一个计时器,每隔一秒钟就重新运行一次,但这不起作用.

还有什么我应该做的吗?这个问题有什么答案吗?

谢谢.

小智 0

添加到viewdidappear中

_locamangr = [CLLocationManager new];
    _locamangr.delegate = self;
    //    _locamangr.distanceFilter = kCLDistanceFilterNone;
    _locamangr.desiredAccuracy = kCLLocationAccuracyBest;
    if ([_locamangr respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [_locamangr requestAlwaysAuthorization] ;
        [_locamangr requestWhenInUseAuthorization];
    }
    [_locamangr startUpdatingLocation];
Run Code Online (Sandbox Code Playgroud)

并在 infoplist 中设置。NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription