【问题标题】:How to use map in XIB or a project that doesn't contain storyboard?如何在 XIB 或不包含情节提要的项目中使用地图?
【发布时间】:2014-11-13 03:35:06
【问题描述】:

我正在尝试在我的应用程序中添加地图,我可以在其中添加 LatitudeLongitude 并在地图上获取一些位置。

  1. 我已将 MapView 添加到我的 XIB 中

  2. 建立连接/IBOutlet

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

  1. 添加了 Mapkit 框架
  2. 添加委托 MKMapViewDelegate

在 VIEWDIDLOAD 中的位置

self.mapView.delegate = self;


    [self performSelectorOnMainThread:@selector(initializeMap) withObject:self waitUntilDone:YES];


   [mapView setShowsUserLocation:YES];

调用这个方法

-(void)initializeMap {

    mapView = [[MKMapView alloc] init];

}

但是每当我每次运行应用程序时它都会崩溃并给出以下错误:

由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:' initWithCoder:: MKMapView 必须在主线程上初始化。

【问题讨论】:

  • 由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:' initWithCoder:: MKMapView 必须在主线程上初始化。'
  • 您已经将地图视图创建为 IBOutlet。为什么要重新分配?
  • 刚刚尝试了一种可能性。
  • 别这样。这是错误的。
  • @UlasSancak 是的,你是对的,正确的方法是什么?

标签: ios objective-c iphone mapkit xib


【解决方案1】:

您的代码似乎是正确的,您可以尝试以下几点:-

1) 尝试在单独的视图控制器上加载您的地图。

2) 在主线程上加载地图。

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

4) 加载地图时,请确保视图上没有过多的处理。

希望这能帮助您解决问题:)

【讨论】:

  • 是的,在单独的 VC 上加载可以解决问题。可能是什么原因,我正在加载试图查看带有其他详细信息的地图。
【解决方案2】:

没有错,你的步骤看起来是正确的。

  1. 使用 IB 将 MapView 添加到您的 xib
  2. 在您的类上创建一个 IBOutlet 并将其链接到 xib 上的 MapView
  3. 转到Build Phases 并与MapKit.framework 链接
  4. #import <MapKit/MapKit.h> 添加到您的班级

我附上一个项目以供参考 https://dl.dropboxusercontent.com/u/2175823/MapTest.zip

从头再做一遍,一步一步检查你的步骤,如果你不能解决,请发布更多信息。

ps:您的错误表明您正在使用后台线程和 UI(您不应该,UI 必须仅在主线程中更改),您在做一些花哨的事情吗?

【讨论】:

  • 查看附件项目,再试一次。
  • 我有一些其他的细节要显示在这个当前的 UI 上,来自 web 服务响应,当我得到它们时,我将它们传递到下一个屏幕就是这样。在这个 VC 上,我刚刚添加了这张地图,试图根据来自该响应的 lat-long 来获取位置。
  • 好的,我用一个示例项目向您展示了它们是正确的步骤。如果您需要更多帮助,则需要发布有关您正在做的事情的更多详细信息,因为您看到的问题是由您正在做的其他事情产生的。
猜你喜欢
  • 1970-01-01
  • 2013-01-19
  • 2012-12-05
  • 2012-03-30
  • 2012-02-24
  • 2017-06-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多