zoukankan      html  css  js  c++  java
  • Xcode4.6下添加百度地图ios版(BMapKit)详细教程(_BMKMapManager错误解决)

    本文旨在帮助新手快速搭建ios版百度地图,官网有相关教程,可是太旧了,现在的xcode都更新到了4.6,他的教程应该是在4.3之前吧。估计新手在搭建的时候一定会遇到错误,按照我的教程一步一步,保证你花最少的时间,快速进行地图开发。

    老鸟莫笑,我也是个新手,只是记录一下心路历程,如有错误,敬请指教。



    机器环境:mac os x 10.8.2

    开发环境:xcode4.6

    真机环境:iPod Touch4G  版本:6.1.2


    地图版本:BaiduMapApi_Lib_iOS_1.2.2    下载地址:http://developer.baidu.com/map/sdk-ios.htm


    【注】:使用百度地图的SDK需要申请key,应用名称可随意写,前提是有百度账号,详情官网查看。



    正文


    1,官网下载最新的SDK开发包_iOS静态库文件 http://developer.baidu.com/map/sdkiosdev-download.htm

    解压后如下图所示:



    2,打开xcode,新建一个demo工程(或是在你现有的工程下),创建好后把下载的的inc,libs,mapapi.bundle三个文件夹导入到工程内,注意需要copy+destination,看我如下截图:


    一定要勾选copy和create group 同时要添加到target。


    3,几乎所有的第三方地图sdk都是依赖于apple自有的几个framework,所以这一步需要我们导入:CoreLocation.framework和QuartzCore.framework。导入方法如下:


    --------------------------------------------------------------------------------------------------------

    此时如果.h导入BMapKit.h头文件,实例化BMKMapManager或是BMapView,一定会有如下的错误:



    貌似提示:libbaidumapapi.a找不到,那么是路径的问题么?这就是大家常遇到的BMKMapManager错误。其实原理是系统无法链接到我们的地图静态库,解决办法如下,大家继续跟着我第四步走(这只是个小尝试和插曲,还未设置环境变量,肯定会报错)

    --------------------------------------------------------------------------------------------------------


    4,选中工程,target,切换到buildsetting标签,定位到other link flag,

    输入:-all_load



    5,,现在需要设置一下链接库的环境变量,好让项目能顺利找到目录下的.a文件,选中工程,target,切换到buildsetting标签,定位到Library search Path ,如下图所示:


    删除已有的三个,添加一个足矣(模拟器+真机):$(SRCROOT)/libs/Release$(EFFECTIVE_PLATFORM_NAME)

    简单解释一下:

    $(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator,这个涉及环境变量的相关知识,我也不太懂,全是自己尝试出来的,大家直接copy我这行就行了。如下:



    6,这个时候,静态库文件已经设置完毕,剩下的就只有代码工作了,由于需要key的验证,所以我们先需要使用BMKMapManager类,配置申请到的key,以得到授权。选中AppDelegate.h

    1. #import "BMapKit.h" //导入BMapKit.h  
    2.   
    3. @interface AppDelegate : UIResponder <UIApplicationDelegate>{  
    4.     BMKMapManager* _mapManager;  //实例化  
    5. }  


    选中AppDelegate.m,修改成.mm,(注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm))

    【注意:如果没有mm,运行会大量报错的】

    AppDelegate.mm中的didFinishLaunchingWithOptions,加入如下代码:

    1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  
    2. {  
    3.     // 要使用百度地图,请先启动BaiduMapManager  
    4.     _mapManager = [[BMKMapManager alloc]init];  
    5.     // 如果要关注网络及授权验证事件,请设定generalDelegate参数  
    6.     BOOL ret = [_mapManager start:@"这里填你输入的key" generalDelegate:nil];  
    7.     if (!ret) {  
    8.         NSLog(@"manager start failed!");  
    9.     }  
    10.       
    11.       
    12.     return YES;  
    13. }  



    7,在需要显示地图的viewcontroller.m中加入如下代码:

    1. #import "ViewController.h"  
    2. #import "BMKMapView.h"  
    3.   
    4. @interface ViewController ()  
    5.   
    6. @end  
    7.   
    8. @implementation ViewController  
    9.   
    10. - (void)viewDidLoad  
    11. {  
    12.     [super viewDidLoad];  
    13.     BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];  
    14.     self.view = mapView;  
    15. }  


    导入BMKMapView.h后,实例化BMKMapView类。


    8,在AppDelegate中授权过后,可以随意在任意的Viewcontroller中使用Mapview了。

    (当然,BMKMapManager授权也可以写到任意的ViewController中,但是这样的话,只能在这个ViewController中使用MapView,换其它类使用地图的话,还需再来授权,否则地图view会是黑屏)。


    模拟器截图




    真机截图


    结尾

    整个过程,就中间设置环境变量比较麻烦,但以后不管是模拟器还是真机调试,都不用再做任何设置了,不好嘛?



  • 相关阅读:
    梯度下降
    02CSS
    逻辑推理题
    TensorFlow安装
    Python线程学习
    tensorflow中张量_常量_变量_占位符
    01HTML
    HDOJ 1078 FatMouse and Cheese
    HDOJ 2830 Matrix Swapping II
    HDOJ 2191 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活
  • 原文地址:https://www.cnblogs.com/conanwin/p/4250439.html
Copyright © 2011-2022 走看看