这是因为xcode升级造成的定位权限设置问题。
升级xcode6、xcode7以后打开以前xcode5工程,程序不能定位。工程升级到xcode6或xcode7编译时需要iOS8 要自己写授权,不然没权限定位。
解决方法:
首先在 info.plist里加入对应的缺省字段 ,值设置为YES(前台定位写上边字段,前后台定位写下边字段)
          NSLocationWhenInUseUsageDescription   //允许在前台获取GPS的描述
          NSLocationAlwaysUsageDescription   //允许在前、后台获取GPS的描述

设置的图示:

好了,如果设置好了,那就正式进入编码学习吧,首先熟悉苹果提供的关于定位服务相关的类,方法以及属性:

1、定位服务和地图应用的介绍 定位服务: 获取用户当前的位置信息,针对用户的位置信息做相关的数据处理。

地图应用: 根据实际需求展示地图和周边环境信息,基于用户当前位置展示用户所关注的地图位置信息、以及为用户导航。

  • 定位服务要掌握的:

    • 主要操作的类:CLLocationManager
    • 所属库:CoreLocation
    • 结构体:CLLocationCoordinate2D(经纬度)、CLCLocationCoorRegion(区域)
  • 地图应用需要掌握的:
    • 框架:MapKit
    • 操作类:MKMapView

2、定位服务

  • 属性:

    • desiredAccuracy设置定位精确度,这是一个常量属性,一般用best
    • distanceFilter 重新定位的最小变化距离
  • 方法:

    • 设置什么时候开启定位的状态

      • requestAlwaysAuthorization() 始终开启定位
      • requestWhenInUseAuthorization() 当app进入前台的时候开启定位(iOS8的新方法)
      • 类方法locationServicesEnabled() 是否有定位服务功能(CLLocationManager)
      • startUpdatingLocation() 开启定位
  • 代理:

    • 代理的协议:
    • 代理的方法:可以直接进入这个库的API查看,只要就是定位错误调用的代理方法,定位成功调用的代理方法等等;
  • 涉及到的对象

    • locations: CLLocation 该CLLocation对象的属性:

      • coordinate

        • longitude/latitude
  • 英语词汇积累:

    • accuracy 英 'ækjʊrəsɪ n. [数] 精确度,准确性
    • filter 英 'fɪltə 滤波器 过滤器;筛选;滤光器 过滤;渗透;用过滤法除去
    • //
      // ViewController.swift
      // LocationManager
      //
      // Created by HEYANG on 16/1/26.
      // Copyright © 2016年 HEYANG. All rights reserved.
      //

      import UIKit

      // 需要导入CoreLocation框架
      import CoreLocation

      class ViewController: UIViewController,CLLocationManagerDelegate {

      // 声明一个全局变量
      var locationManager:CLLocationManager!

      override func viewDidLoad() {
      super.viewDidLoad()
      locationManager = CLLocationManager()

      // 设置定位的精确度
      locationManager.desiredAccuracy = kCLLocationAccuracyBest

      // 设置定位变化的最小距离 距离过滤器
      locationManager.distanceFilter = 50

      // 设置请求定位的状态
      if #available(iOS 8.0, *) {
      locationManager.requestWhenInUseAuthorization()
      } else {
      // Fallback on earlier versions
      print("hello")
      }//这个是在ios8之后才有的

      // 设置代理为当前对象
      locationManager.delegate = self;

      if CLLocationManager.locationServicesEnabled(){
      // 开启定位服务
      locationManager.startUpdatingLocation()
      }else{
      print("没有定位服务")
      }

      }
      // 定位失败调用的代理方法
      func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
      print(error)
      }
      // 定位更新地理信息调用的代理方法
      func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
      if locations.count > 0
      {
      let locationInfo = locations.last!
      let alert:UIAlertView = UIAlertView(title: "获取的地理坐标",
      message: "经度是:\(locationInfo.coordinate.longitude),维度是:\(locationInfo.coordinate.latitude)",
      delegate: nil, cancelButtonTitle: "是的")
      alert.show()
      }
      }
      }

    • //
      // ViewController.m
      // LocationManager
      //
      // Created by HEYANG on 16/1/26.
      // Copyright © 2016年 HEYANG. All rights reserved.
      //

      #import "ViewController.h"

      #import <CoreLocation/CoreLocation.h>

      @interface ViewController () <CLLocationManagerDelegate>

      /** 全局定位对象 */
      @property (nonatomic,strong)CLLocationManager *locationManager;

      @end

      @implementation ViewController

      - (void)viewDidLoad {
      [super viewDidLoad];

      CLLocationManager* locationManager = [[CLLocationManager alloc] init];

      // 设置定位精确度
      locationManager.desiredAccuracy = kCLLocationAccuracyBest;
      // 设置定位变化最小距离
      locationManager.distanceFilter = 50;

      // 设置定位服务的使用状态
      [locationManager requestWhenInUseAuthorization];
      locationManager.delegate = self;

      if ([CLLocationManager locationServicesEnabled]) {
      [locationManager startUpdatingLocation];
      }else{
      NSLog(@"本机不支持定位服务功能");
      }

      self.locationManager = locationManager;
      }
      // 定位失败调用的代理方法
      -(void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error{
      NSLog(@"错误信息:%@",error);
      }
      // 定位数据更新调用的代理方法
      -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations{
      if (locations.count > 0) {
      CLLocation* location = locations.lastObject;
      CLLocationCoordinate2D coordinate2D = location.coordinate;
      NSString* message = [NSString stringWithFormat:@"经度:%lf,维度是:%lf",coordinate2D.longitude,coordinate2D.latitude];
      UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:@"显示当前位置的经纬度"
                      message:message delegate:nil cancelButtonTitle:@"取消" otherButtonTitles:@"确定", nil];
      [alertView show];

      }
      }

      @end

iOS之地理位置及定位系统 -- 入门笔记的更多相关文章

  1. iOS之地理位置及定位系统 -- 入门笔记(用Swift)

    前言:关于地理位置及定位系统,在iOS开发中也比较常见,比如美团外面的餐饮店铺的搜索,它首先需要用户当前手机的位置,然后在这个位置附近搜索相关的餐饮店铺的位置,并提供相关的餐饮信息,再比如最常见的就是 ...

  2. iOS 即时通讯,从入门到 “放弃”?

    原文链接:http://www.jianshu.com/p/2dbb360886a8 本文会用实例的方式,将 iOS 各种 IM 的方案都简单的实现一遍.并且提供一些选型.实现细节以及优化的建议. — ...

  3. C++ 快速入门笔记:进阶编程

    C++入门笔记:高级编程 文件和流 打开文件 void open (const char *filename, ios::openmode mode); ios::app 追加模式.所有写入都追加到文 ...

  4. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  5. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  6. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  7. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  8. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  9. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

随机推荐

  1. 复习课程jdbc:使用配置文件properties进行连接数据库,数据库存取图片,批处理,时间戳,事物回滚等等

    使用配置文件properties进行连接数据库 首先创建一个file自定义文件名,但是后缀名必须改为.properties(不分大小写):如config.properties: 然后双击config. ...

  2. spring da-y02-go1

    使用构造器实例化bean: springday02:(同样导入5个基本jar包)1.复制xml文件到ioc包下2.B类,实现无参构造器3.A类,B是它的成员变量,实现无参和set/get方法4.修改x ...

  3. 在Visual Studio 2013/2015上使用C#开发Android/IOS安装包和操作步骤

    Xamarin 配置手册和离线包下载 http://pan.baidu.com/s/1eQ3qw8a 具体操作: 安装前提条件 1. 安装Visual Studio 2013,安装过程省略,我这里安装 ...

  4. linux更新系统之后,删除多余的开机启动项

    实验环境是centos7,采用uefi的引导方式,启动管理软件是grub2 1. 进入 /boot 目录,应该可以发现许多文件的文件名是以 vmlinuz 开头,后面跟着版本信息,这些就是内核.我们要 ...

  5. [php]表单和验证

    <?php /* 表单的作用: 通过表单 发布和收集 信息. 对html表单进行编码 只是有效接受用户输入的必要操作的(一部分), 必须由[服务器端]组件来处理 一 标头函数(header()) ...

  6. 【py网页】urllib模块,urlopen

    Python urllib 库提供了一个从指定的 URL 地址获取网页数据,然后对其进行分析处理,获取想要的数据. 下面是在 Python Shell 里的 urllib 的使用情况: 01 Pyth ...

  7. 【海岛帝国系列赛】No.4 海岛帝国:LYF的太空运输站

    50212228海岛帝国:LYF的太空运输站 [试题描述] 最近,“购物券”WHT在“药师傅”帝国资源大会上提出了“SSTS”太空运输站计划.由于恐怖分子前些日子刚猖狂完,炸毁高楼无数,YSF不得不执 ...

  8. NOIP200301乒乓球

    NOIP200301乒乓球 [问题背景] 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球 员因为无法适应新规则只能 ...

  9. JNI 回调小记

    javah在eclipse中设置参数:location(javah.exe的位置)working dir(${project_loc}/src) -classpath .;./classes -d $ ...

  10. 记一个由MemCached引发的性能问题

    最近有个项目用loadrunner做了压力测试,发现并发量还不到200服务器就支撑不住了.boss那边紧急开会,说此项目最近3个月内将有100家中大型公司用于校园招聘工作,如果这个问题不解决公司有可能 ...