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

本以为一个地图的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. objective-C学习笔记(三)数据成员:属性与实例变量

    类型成员 Type Member 结构体 struct 的成员很简单,只有变量. 类的成员就很多了: 数据成员 data member 描述对象(本讲重点) · 实例变量  instance vari ...

  2. BZOJ 1191: [HNOI2006]超级英雄Hero(二分图匹配)

    云神说他二分图匹配从来都是用网络流水过去的...我要发扬他的精神.. 这道题明显是二分图匹配.网络流的话可以二分答案+最大流.虽然跑得很慢.... -------------------------- ...

  3. C++内联函数、函数模板之于头文件

    一.基本说明 C++标准中提到,一个编译单元是指一个.cpp文件以及它所include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件 ...

  4. [C#绘图]Matrix类

    想要从入门到精通一门语言,最好的学习文档就是官方提供的文档,比如说OpenCV的学习,最权威的学习资料还是其官方的学习文档,C#和.net的最好的学习入门文档还是MSDN.但是好多人一开始真的不会用, ...

  5. javascriptDOM编程艺术_学习笔记_知识点 动态创建标记

    传统技术:document.write 和 innerHTML 深入剖析DOM方法:createElement.createTextNode.appendChild 和 insertBefore   ...

  6. virtualbox 中安装win7虚拟机

    下载了win7镜像文件后,在virtualbox中装了几次都提示 windows faied to start,后来在网上找了些解决办法,在这记录下,免得下次又忘了 创建新的虚拟机: 1.安装virt ...

  7. [LeetCode]题解(python):001-Two-Sum

    题目来源: https://leetcode.com/problems/two-sum/ 题意分析: 这道题目是输入一个数组和target,要在一个数组中找到两个数字,其和为target,从小到大输出 ...

  8. React使用笔记(3)-React Event Listener

    Date: 2015-11-28 12:18 Category: Web Tags: JavaScript Author: 刘理想 [toc] 1. 构造基本结构 首先,我们先创建一个按钮,一个输入框 ...

  9. PowerShell Remove all user defined variable in PowerShell

    When PS scripts executes, it is possibly create much user defined variables. So, sometimes these var ...

  10. document.compatMode简介

    对于document.compatMode,很多朋友可能很少接触,知道他的存在却不清楚他的用途.今天在ext中看到 document.compatMode的使用,感觉这个对于我们开发兼容性的web页面 ...