今天我在我的第三放微博客户端
KittenYang
中使用定位服务发现,由于使用Xcode6进行编译,在iOS8中之前老一套的CLLocationManager
使用规则已经不适用了。好在经过搜索和询问我终于找到了iOS8下的解决办法,下面做个笔录。
首先在 .h文件
中定义一个属性:
@property (nonatomic, strong) CLLocationManager *locationManager;
并且遵守CLLocationManagerDelegate
委托:
@interface NearbyViewController: BaseViewController<CLLocationManagerDelegate>
之后在 viewDidLoad
中创建这个变量:
if (self.locationManager == nil) {
self.locationManager = [[CLLocationManager alloc]init];
}
self.locationManager.delegate = self;
[self.locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
if ([[[UIDevice currentDevice]systemVersion]floatValue] >= 8.0) {
[self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];
注意到上面的[self.locationManager requestWhenInUseAuthorization];
这么做就是为了实现第一次打开应用询问用户是否允许该应用使用定位服务。
之后,请到info.plist
中添加一个Key:NSLocationWhenInUseUsageDescription
,就像这样:
注意后面的文字:"请打开定位,本服务才能帮你找到最近的站点。"这时显示在如下两张图中的文字:
和
当然,这里的文字你可以随意写。
这还没完哦,别忘了我们实现了CLLocationManagerDelegate
委托,所以要实现对应协议方法:
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations{
CLLocation *newLocation = [locations lastObject];
NSLog(@"开始定位:%@",newLocation);
[manager stopUpdatingHeading];
if (self.data == nil) {
float longitude = newLocation.coordinate.longitude;
float latitude = newLocation.coordinate.latitude;
- (void)locationManager:(CLLocationManager *)manager
didFailWithError:(NSError *)error{
NSLog(@"定位错误");
}
Tips:
这里要特别注意,之前的
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation __OSX_AVAILABLE_BUT_DEPRECATED
已经不能在iOS8上使用了!
好了,在真机或者模拟器运行吧 :)
转载请注明出处,万分感谢!