在后台模式下使用iOS模拟器中的高速公路驾驶/城市运行

时间:2014-11-06 10:35:01

标签: ios ios-simulator core-location cllocationmanager

我正在尝试使用iOS模拟器中的选项:debug->高速公路驱动器/城市运行以模拟位置更新。

在我的代码中,我使用CLLocationManager通过以下代码获取位置更新:

- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

locationManager = [[CLLocationManager alloc] init];
locationManager.delegate = self;
[locationManager setDesiredAccuracy:kCLLocationAccuracyNearestTenMeters];
[locationManager setDistanceFilter:20];
}

-(void)viewWillAppear:(BOOL)animated {
[locationManager startUpdatingLocation];
}

-(void)locationManager:(CLLocationManager *)lm didUpdateLocations:(NSArray *)locations{
CLLocation *location = [locations lastObject];
NSLog(@"Location returned: %f, %f Accuracy: %f", location.coordinate.latitude,  location.coordinate.longitude, location.horizontalAccuracy);
}

我从来没有在代理上获得位置更新的回调,而我的应用程序是在后台,我在模拟器中选择了该选项。

我为我的应用提供了位置更新的后台模式。请让我知道如何使用这些功能,或者我在这里遗漏了什么。

1 个答案:

答案 0 :(得分:1)

我终于解决了这个问题。模拟器的选项工作得很好,但问题是CLLocation的实现。

在iOS 8上,位置更新代码无效,除非:

  1. 您添加了NSLocationWhenInUseUsageDescription&具有一些字符串值的plist NSLocationAlwaysUsageDescription将提示给用户。

  2. 您需要添加询问用户的权限才能使位置代码生效:

     [self.locationManager requestWhenInUseAuthorization]
     [self.locationManager requestAlwaysAuthorization]
    
  3. 取自 this post