zoukankan      html  css  js  c++  java
  • iOS8 地图定位

     在xcode6中 苹果地图得定位方法修改了,以前得不能用

     首先在在Supporting Files下得Info.plis里面添加NSLocationAlwaysUsageDescription 或 NSLocationWhenInUseUsageDescription 两个String字段,字段不能为空

    #import "ViewController.h"
    #import <CoreLocation/CoreLocation.h>
    
    @interface ViewController ()<CLLocationManagerDelegate>
    @property (nonatomic,strong) CLLocationManager  *locMgr;
    @end
    
    @implementation ViewController
    -(CLLocationManager *)locMgr
    {
        if (_locMgr == nil) {
            // 1.创建位置管理器(定位用户的位置)
            self.locMgr = [[CLLocationManager alloc] init];
            
            // 2.设置代理
            self.locMgr.delegate = self;
        }
        return _locMgr;
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        
        if ([CLLocationManager locationServicesEnabled]) { //定位服务打开
            if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0){
                if ([CLLocationManager authorizationStatus]==kCLAuthorizationStatusNotDetermined){
                    // 开始定位用户的位置
                    [self.locMgr startUpdatingLocation]; 
                }
            }
        }
        else
        {
            [self.locMgr startUpdatingLocation];
        }
    }
    
    
    
    #pragma mark - CLLocationManagerDelegate
    - (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
    {
        CLLocation *loc=[locations firstObject];
    
        CLLocationCoordinate2D coordinate=loc.coordinate;
        
        NSLog(@"经度:%f,纬度:%f,海拔:%f,航向:%f,行走速度:%f",coordinate.longitude,coordinate.latitude,loc.altitude,loc.course,loc.speed);
    
         [_locMgr stopUpdatingLocation];
    }
    
    /**
     *    __IPHONE_4_2  Invoked when the authorization status changes for this application.
     */
    - (void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status
    {
        // kCLAuthorizationStatusAuthorizedWhenInUse 4 用户获得授权使用他们的位置,只有当你的应用程序是可见的(它将看到他们如果你继续接收位置更新在背景)。授权使用发布api没有被授予。
        // kCLAuthorizationStatusAuthorizedAlways 3 用户在任何时候获得授权使用其位置,包括监测区域,访问,或显著位置的变化。
        // kCLAuthorizationStatusNotDetermined 0 关于这个应用程序用户尚未选择
        // kCLAuthorizationStatusDenied 2 用户已经明确拒绝授权对于这个应用程序,或者在设置位置服务被禁用。
        switch (status) {
            case kCLAuthorizationStatusDenied:
            {
                UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"请在系统设置中打开"定位服务"来允许"百度地图"确定您的位置" message:nil delegate:nil cancelButtonTitle:@"知道了" otherButtonTitles: nil];
                [alertView show];
            }
                break;
                
            case kCLAuthorizationStatusNotDetermined:
            {
                if ([self.locMgr respondsToSelector:@selector(requestAlwaysAuthorization)])
                {
                    [self.locMgr requestWhenInUseAuthorization];
                    [self.locMgr startUpdatingLocation];
                }
            }
                break;
            case kCLAuthorizationStatusRestricted:
            {
                UIAlertView *tempA = [[UIAlertView alloc]initWithTitle:@"提醒" message:@"定位服务无法使用!" delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil, nil];
                [tempA show];
            }
                break;
            default:
                break;
        }
    }
    
    @end

    遇到的错误和解决方法:

    错误:Terminating app due to uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named MKMapView'

     解决方法:添加MapKit.framework

    错误:Trying to start MapKit location updates without prompting for location authorization. Must call -[CLLocationManager requestWhenInUseAuthorization] or -[CLLocationManager requestAlwaysAuthorization] first.

    解决办法:

    在Supporting Files下得Info.plis里面添加NSLocationAlwaysUsageDescription 或 NSLocationWhenInUseUsageDescription 两个String字段,

    If the NSLocationAlwaysUsageDescription key is not specified in your Info.plist, this method will do nothing, as your app will be assumed not to support Always authorization.

     
     
     
     
  • 相关阅读:
    社交集群 并查集
    run类级别的setup和teardown.py
    run测试用例类的写法.py
    run测试用例与数据库的交互.py
    run测试用例函数写法.py
    Python assert
    使用JDBCTemplate实现与Spring结合,方法公用 ——Emp实现类(EmpDaoImpl)
    使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
    使用JDBCTemplate实现与Spring结合,方法公用 ——共用实现类(BaseImpl)
    使用JDBCTemplate实现与Spring结合,方法公用 ——接口(BaseDao)
  • 原文地址:https://www.cnblogs.com/pjl111/p/4466618.html
Copyright © 2011-2022 走看看