2014-09-28 50 views
8

基本上一半的时间委托方法CLLocationManager不工作的所有(iOS 8的时,Xcode 6)

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

根本没有被调用的时候。但另一半的时间它完美的工作!我发现它通常是在关闭并退出它之后首次启动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]; 

有时候这工作,有时没有。我甚至做了个计时器,每隔几秒钟就重新运行一次,这是行不通的。

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

谢谢。

+0

位置管理器实际上只是为了在设备上工作。在模拟器中,你有没有尝试设置位置? – Milo 2014-09-28 04:39:26

+0

你的意思是*一半的时间*?当操作系统有位置更新要传递时调用'didUpdateLocations'。有时它会,但其他时候(不太常见)它不会。 – Mike 2014-09-28 04:47:57

+0

几件事情,你有一个'NSLocationAlwaysUsageDescription'添加到你的应用程序info.plist文件?你有两个在模拟器中设置了一个位置? (Debug-> Location) – TyloBedo 2014-09-28 05:18:35

回答

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]; 

和infoplist设置。 NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription

1
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

此委托方法被调用只有在新的位置可用。有时GPS不会得到卫星信号,因此无法获取地点。所以在这些情况下,上述方法不会被触发。由于您正在模拟器中进行测试,因此您应该更改或设置位置。我认为它会在实际设备上正常工作。