我正在尝试使用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);
}
我从来没有在代理上获得位置更新的回调,而我的应用程序是在后台,我在模拟器中选择了该选项。
我为我的应用提供了位置更新的后台模式。请让我知道如何使用这些功能,或者我在这里遗漏了什么。
答案 0 :(得分:1)
我终于解决了这个问题。模拟器的选项工作得很好,但问题是CLLocation
的实现。
在iOS 8上,位置更新代码无效,除非:
您添加了NSLocationWhenInUseUsageDescription
&具有一些字符串值的plist NSLocationAlwaysUsageDescription
将提示给用户。
您需要添加询问用户的权限才能使位置代码生效:
[self.locationManager requestWhenInUseAuthorization]
[self.locationManager requestAlwaysAuthorization]
取自 this post。