2014-09-18 29 views
0

我想在我的應用程序中添加地圖,我可以添加Latitude & Longitude並在地圖上獲取一些位置。如何在XIB或不包含故事板的項目中使用地圖?

  1. 我添加了一個MapView類到我的XIB

  2. 建立連接/ IBOutlet中

@property (retain, nonatomic) IBOutlet MKMapView *mapView;

  • 新增Mapkit框架
  • 添加委託MKMapViewDelegate
  • 凡在viewDidLoad中

    self.mapView.delegate = self; 
    
    
        [self performSelectorOnMainThread:@selector(initializeMap) withObject:self waitUntilDone:YES]; 
    
    
        [mapView setShowsUserLocation:YES]; 
    

    調用該方法

    -(void)initializeMap { 
    
        mapView = [[MKMapView alloc] init]; 
    
    } 
    

    但每當我運行應用程序每次它崩潰,並提供了以下錯誤:

    Terminating app due to uncaught exception 'NSRangeException', reason: ' initWithCoder:: MKMapView must be initialized on the main thread.

    +0

    終止應用程序由於未捕獲的異常「NSRangeException」,理由是:「<的MKMapView:0xb1b35c0; frame =(0 0; 0 0); transform = [0,0,0,0,0,0]; alpha = 0; opaque = NO; layer =(null)> initWithCoder :: MKMapView必須在主線程上初始化。' – 2014-09-18 17:20:51

    +1

    您已經將您的地圖視圖創建爲IBOutlet。你爲什麼再分配一次? – 2014-09-18 17:41:42

    +0

    只是嘗試了一種可能性。 – 2014-09-18 17:42:35

    回答

    1

    您的代碼似乎是正確的,你可以嘗試以下幾點: -

    1)嘗試加載在不同的視圖控制器的地圖。

    2)在主線程上加載映射。

    3)確保您已添加MapKit.framework框架。

    4)加載地圖時,請確保視圖上沒有太多處理。

    希望這將幫助你解決你的問題:)

    +0

    yes在單獨的VC上加載可解決此問題。可能是什麼原因,我正在加載試圖查看地圖與其他細節。 – 2014-09-19 13:28:44

    1

    有沒有錯,它的步驟看起來是正確的。

    1. 添加一個MapView到您的廈門國際銀行與IB
    2. 你的類創建一個IBOutlet,它
    3. 圍棋與MapKit.framework
    4. 鏈接到的MapView的廈門國際銀行,以Build Phases和鏈接添加#import <MapKit/MapKit.h>上您的課

    我附加了一個項目,以供參考 https://dl.dropboxusercontent.com/u/2175823/MapTest.zip

    再次從頭開始,逐一檢查您的步驟,如果無法解決,請發佈更多信息。

    ps:你的錯誤表明你正在玩後臺線程和UI(你不應該,只能在主線程中更改UI),你是否在做一些奇特的事情?

    +0

    已經添加了這些! – 2014-09-18 18:08:41

    +0

    看看附加的項目,再試一次。 – Daniele 2014-09-18 18:09:56

    +0

    我有一些其他的細節將顯示在當前的用戶界面來自網絡服務響應,當我得到它們時,我將它們傳遞給下一個屏幕即它。在這個VC上,我剛剛添加了這個Map,它試圖根據來自該響應的經緯度來獲取位置。 – 2014-09-18 18:25:17