你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> IOS7學習之路十(百度地圖API環境搭建)

IOS7學習之路十(百度地圖API環境搭建)

編輯:IOS開發綜合

百度地圖官網的API開發教程鏈接:點擊打開鏈接

我按照他的教程做的總出現“Apple Mach-O linker command failed with exit code 1”的錯誤,於是只好自己上網搜了。

下面說說自己的搭建環境的方法吧 :我錯誤的原因是引入靜態庫的時候路徑錯誤導致的

1.下載鏈接點擊打開鏈接

2。解壓後如下:

\

3.把以上三個inc libs mapapi.bundle文件復制粘貼到項目根目錄下

點擊Xcode中項目名。原則add projects to"XXX" 把inc文件夾、mapapi.bundle文件和libs/Release-iphoneos文件夾中的libbaidumapapi.a添加到項目中。

4 幾乎所有的第三方地圖sdk都是依賴於apple自有的幾個framework,所以這一步需要我們導入:CoreLocation.framework和QuartzCore.framework、OpenGLES.framework、SystemConfiguration.framework、CoreGraphics.framework。導入方法如下:

\



<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4KPHA+CjUuPC9wPgo8aDIgY2xhc3M9"mw-headline" id=".E7.AE.80.E4.BB.8B2"> 引入靜態庫文件


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

2).設置靜態庫的鏈接路徑,在XCode的Project -> Edit Active Target -> Build -> Search Path -> Library Search Paths中添加您的靜態庫目錄,$(SRCROOT)/libs/Release$(EFFECTIVE_PLATFORM_NAME)

Library Search Paths中這一個就夠了把其他的刪除

注:靜態庫中采用ObjectC++實現,因此需要您保證您工程中至少有一個.mm後綴的源文件(您可以將任意一個.m後綴的文件改名為.mm),或者在工程屬性中指定編譯方式,即將XCode的Project -> Edit Active Target -> Build -> GCC4.2 - Language -> Compile Sources As設置為"Objective-C++"


6.

選中工程,target,切換到Build Setting標簽,定位到other link flag,
輸入:-all_load

\



7.剩下的就只有代碼工作了,由於需要key的驗證,所以我們先需要使用BMKMapManager類,配置申請到的key,以得到授權。選中AppDelegate.h

[plain] view plaincopy
  1. #import "BMapKit.h" //導入BMapKit.h
  2. @interface AppDelegate : UIResponder {
  3. BMKMapManager* _mapManager; //實例化
  4. } 選中AppDelegate.m,修改成.mm,(注:靜態庫中采用ObjectC++實現,因此需要您保證您工程中至少有一個.mm後綴的源文件(您可以將任意一個.m後綴的文件改名為.mm))
    【注意:如果沒有mm,運行會大量報錯的】
    在AppDelegate.mm中的didFinishLaunchingWithOptions,加入如下代碼:
    [plain] view plaincopy
    1. - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    2. {
    3. // 要使用百度地圖,請先啟動BaiduMapManager
    4. _mapManager = [[BMKMapManager alloc]init];
    5. // 如果要關注網絡及授權驗證事件,請設定generalDelegate參數
    6. BOOL ret = [_mapManager start:@"你申請的ak" generalDelegate:nil];
    7. if (!ret) {
    8. NSLog(@"manager start failed!");
    9. }
    10. self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    11. // Override point for customization after application launch.
    12. self.viewController = [[[ZYViewController alloc] initWithNibName:@"ZYViewController" bundle:nil] autorelease];
    13. self.window.rootViewController = self.viewController;
    14. [self.window makeKeyAndVisible];
    15. return YES;
    16. }

      8 在需要顯示地圖的viewcontroller.m中加入如下代碼:

      [plain] view plaincopy
      1. #import "ViewController.h"
      2. #import "BMKMapView.h"
      3. @interface ViewController ()
      4. @end
      5. @implementation ViewController
      6. - (void)viewDidLoad
      7. {
      8. [super viewDidLoad];
      9. BMKMapView* mapView = [[BMKMapView alloc]initWithFrame:CGRectMake(0, 0, 320, 460)];
      10. self.view = mapView;
      11. }
        導入BMKMapView.h後,實例化BMKMapView類。


        自2.0.0起,BMKMapView新增viewWillAppear、viewWillDisappear方法來控制BMKMapView的生命周期,並且在一個時刻只能有一個BMKMapView接受回調消息,因此在使用BMKMapView的viewController中需要在viewWillAppear、viewWillDisappear方法中調用BMKMapView的對應的方法,並處理delegate,代碼如下:

        源碼復制打印關於
        1. (void)viewWillAppear:(BOOL)animated
        2. {
        3. [_mapView viewWillAppear];
        4. _mapView.delegate = self; // 此處記得不用的時候需要置nil,否則影響內存的釋放
        5. }
        6. -(void)viewWillDisappear:(BOOL)animated
        7. {
        8. [_mapView viewWillDisappear];
        9. _mapView.delegate = nil; // 不用時,置nil
        10. }

          編譯,運行,效果如下圖所示:



  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved