建议高手飘过~~~~~~

本以为一个地图的helloworld很简单。实际使用却不是那么回事。就想把地图的头文件和静态库添加到文件中。应该就能用了。

baidu提供的xcode工程是支持ios4.3的。所以有挺多地方不同的。我的工程默认是6.1。可能也让我困惑了。

遇到三个问题:

1.添加的静态库不能编译通过。

2.号称离线地图。根本导入不进去。

3.按照上述配置,test工程启动之后还是网格

第一个问题:我们先来看看官方说明。

http://developer.baidu.com/map/sdkiosdev-2.htm

文中说明了三种方式。

引入静态库文件

百度MapAPI提供了模拟器和真机两中环境所使用的静态库文件,分别存放在libs/Release-iphonesimulator和libs/Release-iphoneos文件夹下。有两种方式可以引入静态库文件:

第一种方式:直接将对应平台的.a文件拖拽至XCode工程左侧的Groups&Files中,缺点是每次在真机和模拟器编译时都需要重新添加.a文件;

第二种方式:使用lipo命令将设备和模拟器的.a合并成一个通用的.a文件,将合并后的通用.a文件拖拽至工程中即可,具体命令如下:
lipo –create Release-iphoneos/libbaidumapapi.a Release-iphonesimulator/libbaidumapapi.a –output libbaidumapapi.a

第三种方式:

1.将API的libs文件夹拷贝到您的Application工程跟目录下

2.在XCode的Project -> Edit Active Target -> Build -> Linking -> Other Linker Flags中添加-ObjC

3.设置静态库的链接路径,在XCode的Project -> Edit Active Target -> Build -> Search Path -> Library Search Paths中添加您的静态库目录,比如"$(SRCROOT)/../libs/Release$(EFFECTIVE_PLATFORM_NAME)",$(SRCROOT)宏代表您的工程文件目录,$(EFFECTIVE_PLATFORM_NAME)宏代表当前配置是OS还是simulator

注:静态库中采用ObjectC++实现,因此需要您保证您工程中至少有一个.mm后缀的源文件(您可以将任意一个.m后缀的文件改名为.mm),或者在工程属性中指定编译方式,即将XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As设置为"Objective-C++"

看看我们都干了什么?

这个目录BaiduMap_iOSSDK_v2.0.2_Lib下,有两个文件夹和一个bundle。对于我这等菜鸟开发者。当然是一股脑的都拷贝到工程目录下。或者一起拖动到xcode的工程目录下。

第一个和第二个方法都看似很简单。我选择第二种方式,删除了其他两个静态库。添加了合成的通用静态库。

添加上代码之后,出现:

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_BMKMapManager", referenced from:
      objc-class-ref in AppDelegate.o
  "_OBJC_CLASS_$_BMKMapView", referenced from:
      objc-class-ref in MapVC.o
  "_OBJC_CLASS_$_BMKSearch", referenced from:
      objc-class-ref in MapVC.o
  "_OBJC_CLASS_$_BMKPointAnnotation", referenced from:
      objc-class-ref in MapVC.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

根据你写的代码,出的错误也多。最少有个
BMKMapManager。

反过头来看看工程中的Frameworks选项。其实已经仅剩下一个a文件了。为什么啊?找了个公司的高手看了20分钟也没弄明白。回家多次尝试找到了解决方法。

解决方案:

因为xcode工程删除静态库的时候,删除的是引用,文件还在那里。而且工程又没那么智能。不能识别同名静态库版本。所以不能准确定位到合适的静态库版本。删除其他的静态库。仅留下通用的静态库文件在libs目录下就能够解决了。

第二个问题:启动起来,打开地图,一片网格。下载总是提示0 。也不知道在ios上开发这么费劲。打算下载离线地图文件,直接拷贝到文件夹。问题接踵而至。

1.下载离线地图,http://shouji.baidu.com/map/map.html?from=3052

2.找模拟器程序所在目录。我的工程是5.1的。GUI界面无法找到这个目录。需要命令行,原因未知。

cd ~/Library/Application Support/iPhone Simulator/5.1/Applications

剩下就是进入每个GUID看到底是不是iphonemapsdkdemo。如果是的话。进入这个应用的Documents。

3.把下载下来的地图文件拷贝到上面进入的目录即可,不要解压zip文件,直接扔到目录即可。官方说明:http://hi.baidu.com/baidumap/item/8961a0152fd2e1a5ffded525?1225

4.进入模拟器,启动百度demo,进入离线地图,导入提示找到一个地图导入0。以为百度不会这么弱智,地图已经在那里,怎么会不能用。重启一下试试,看看奇迹会不会出现?(什么,还是一片网格?别灰心,我和你是一样的。)

5.为什么导入失败呢?回头又看了一便过程。也许我们开始就下载错了。百度提供的demo,离线地图,北京16.1M。但是网上没有这个大小的地图。iphone3和3GS用的是

  • 北京市(17.5M)。而iphone4以上,都是北京市(16.5M)。很自然的,我们都会选择16.5M的。我自己只能误打误撞了。下载了个17.5M的版本再试。

解决方案:

模拟器中,需要下载iphone3的地图包,也就是lv低分辨率版本。这次再导入,就能看到导入的地图了。如果以前下载过一直是0。最好把模拟器中应用目录全删了。重新构建项目。

第三个问题:经过不断奋斗,启动依然是网格线。为什么啊?

这个问题比较复杂。百度为了限制用户登陆。第一次使用百度离线地图。需要在线验证mananger里的key和你的工程名。

解决方案:

参考百度,配置key的方式。配置完成之后。你应该就能看到期待已久的离线地图了。

百度——地图API——IOS v2.0.2—入门篇的更多相关文章

  1. 百度离线地图API开发V2.0版本

    全面介绍,请看下列介绍地址,改写目前最新版本的百度V2.0地图,已全面实现离线操作,能到达在线功能的95%以上 http://api.jjszd.com:8081/apituiguang/gistg. ...

  2. android 3.0+百度地图api地图如何移动到指定的经纬度处

    由于百度地图api,2.0+和3.0+的改动比较大,api基本上被全换过了,有些同学可能2.0+的api使用的非常熟悉,但是更新到3.0+时,却会遇到一些小麻烦(由于api变了,你就需要重新学习它的a ...

  3. ios 百度地图api 入门

    百度地图api 官方教程: http://developer.baidu.com/map/index.php?title=iossdk 这个非常好, 很适合新手 CLLocationCoordinat ...

  4. 基于百度地图api + AngularJS 的入门地图

    转载请注明地址:http://www.cnblogs.com/enzozo/p/4368081.html 简介: 此入门地图为简易的“广州大学城”公交寻路地图,采用很少量的AngularJS进行inp ...

  5. 百度地图API新手入门

    最近,共享单车着实火了一把,市场竞争也是异常的激烈,百花争艳,百家争鸣,群雄逐鹿,最后鹿死谁手,现在还不得而知,不过可以肯定的是细节决定成败,更重要的还在于用户的体验. 用过的同学们都会知道,打开共享 ...

  6. ExtJs 4.0 DeskTop集成 百度地图API

    经过3天的奋斗最终搞了出来, 网上的资料非常少,希望小⑦的文章对读者有点帮助,PS:小⑦非常努力的~. 不废话,上代码了. 首先.去百度官网Copy一个模版 http://api.map.baidu. ...

  7. [ActionScript 3.0] AS3调用百度地图API

    package { import baidu.map.basetype.LngLat; import baidu.map.basetype.Size; import baidu.map.config. ...

  8. Winform实现用多线程、百度地图API解析某公司的物理地址

    前言 作为一个很挫的C#新手总喜欢自己写点儿不着边际的东西,本人是个新手加菜鸟,写B/S的,工作中,任务完成了,空闲下来,总想继续学点儿什么,由此触发了本篇文章了.个人一直认为,.NET中,C/S所要 ...

  9. C#调用百度地图API经验分享(一)

    最近客户提了一个需求,要在网站中添加百度地图的显示,其实原来是有谷歌地图的,但由于谷歌在大陆遭到封杀,只好再给用户增加一个选择了. 下面我将自己最近整理的一些知识分享给大家. 如何使用百度地图API: ...

随机推荐

  1. docNet基础学完感想

    开学后的一个多月因为要准备acm省赛,所以docnet视频基本没看了!不过,虽然在省赛前每天都在做题,赛前刷了80多题吧!!但是比赛的时候就3题,渣啊!只做出了3个水题,后面两个小时搞两题就是出不来, ...

  2. zoj 3708 Density of Power Network

    /*看英文和图我头都大了,不过很简单的.*/ #include<string.h> #include<stdio.h> ][],q[],w[]; int main(int ar ...

  3. linux定时任务crontab的设置

    linux定时任务crontab的设置http://www.blogjava.net/freeman1984/archive/2010/09/23/332715.html vi /etc/cronta ...

  4. Sliding Window Maximum

    (http://leetcode.com/2011/01/sliding-window-maximum.html) A long array A[] is given to you. There is ...

  5. iOS 支持arm_64 和 x86_64 的OpenSSL 静态库(libcrypto.a, libssl.a)

    下载链接

  6. [LeetCode]题解(python):130-Surrounded Regions

    题目来源: https://leetcode.com/problems/surrounded-regions/ 题意分析: 给定给一个二维的板,这个板只包括‘X’和‘O’.将被‘X’包围的‘O’变成‘ ...

  7. [LeetCode]题解(python):005-Longest Palindromic Substring

    题目来源: https://leetcode.com/problems/longest-palindromic-substring/ 题意分析: 这道题目是输入一段不超过1000的字符串,输出最长的回 ...

  8. selenium 学习笔记 ---新手学习记录(9) 问题总结(java)

    1.百度搜索目标--实例 boolean flag; //点击次数 int shcs=3; int i=0; //窗口焦点控制 String detailWindowHandle = null; // ...

  9. 异常Crash之 NSGenericException,NSArray was mutated while being enumerated

    *** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NS ...

  10. 1148 - Mad Counting(数学)

    1148 - Mad Counting   PDF (English) Statistics Forum Time Limit: 0.5 second(s) Memory Limit: 32 MB M ...