【问题标题】:CLLocationManager not working all the time (iOS 8, Xcode 6)CLLocationManager 不能一直工作(iOS 8,Xcode 6)
【发布时间】:2014-11-22 18:26:42
【问题描述】:

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

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

根本没有被调用。但另一半时间它工作得很好!我发现它通常发生在我关闭并退出 Xcode 后第一次启动 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];

有时这有效,有时无效。我什至做了一个计时器,每隔几秒就重新运行一次,但这是行不通的。

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

谢谢。

【问题讨论】:

  • 位置管理器实际上只是为了在设备上工作。在模拟器中,你试过设置位置吗?
  • 你说的一半时间是什么意思? didUpdateLocations 在操作系统需要提供位置更新时调用。有时会,有时(不太常见)不会。
  • 几件事,你有NSLocationAlwaysUsageDescription添加到你的应用程序info.plist文件?二 你在模拟器中设置了位置吗? (调试->位置)
  • 是的,我有。就像我说的,它在大约一半的时间里完美无缺。位置已设置,事物已添加到 plist,以及所有内容。我发现当我第一次启动 Xcode 并运行应用程序时,它根本不运行委托方法,即使我更改了位置等。其他时候,它可以正常工作并且在应用程序运行时正确运行开始以及何时更改位置。我意识到没什么可做的,但我想知道这是否是已知的事情或其他事情。不过谢谢
  • 我也有同样的问题。对我来说,它一直在使用 iPhone 6 模拟器,但 iPhone 5 没有一半时间工作。我也在调查

标签: ios objective-c xcode cllocationmanager cllocation


【解决方案1】:
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations;  

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

【讨论】:

    【解决方案2】:

    添加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

    【讨论】:

      猜你喜欢
      • 2014-11-07
      • 1970-01-01
      • 2014-12-14
      • 2014-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多