GoogleMaps基本的iOS演示应用程序崩溃 - 无法识别的选择器发送到实例

时间:2014-02-25 16:09:03

标签: ios google-maps google-maps-sdk-ios

我试图运行基本的iOS演示SDK代码。我已经创建了API密钥并且加载正常。 虽然我已经将viewDidLoad中的代码转移到了loadView,但效果仍然存在。请参阅以下代码

-(void)loadView{
    // Create a GMSCameraPosition that tells the map to display the
    // coordinate -33.86,151.20 at zoom level 6.
    GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.86
                                                        longitude:151.20
                                                             zoom:6];
    _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

    _mapView.myLocationEnabled = YES;
    self.view = _mapView;

    // Creates a marker in the center of the map.
    GMSMarker *marker = [[GMSMarker alloc] init];
    marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
    marker.title = @"Sydney";
    marker.snippet = @"Australia";
    marker.map = _mapView;
}

相机已创建,但执行此行时

_mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];

使用描述抛出NSException - > - [GMSMapView animateToCameraPosition:]:无法识别的选择器发送到实例。

  

*由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [GMSMapView   animateToCameraPosition:]:发送到实例的无法识别的选择器   0x14dbb870'   * 第一次抛出调用堆栈:(0x2f462f4b 0x39cd96af 0x2f4668e7 0x2f4651cb 0x2f3b44d8 0x4cebe9 0x4cd78f 0x4ccc41 0x4ccb3d 0x21ced5   0x31bda1bd 0x31bda139 0x1d4b27 0x1d4a83 0x1d51cd 0x31bda37b 0x31c850f1   0x31c85007 0x31c845e3 0x31c8430d 0x31c8407d 0x31c84015 0x31bd5da3   0x3185cc6b 0x3185847b 0x3185830d 0x31857d1f 0x31857b2f 0x31bce0c3   0x2f42e1cd 0x2f42bb71 0x2f42beb3 0x2f396c27 0x2f396a0b 0x34097283   0x31c3a049 0xf58b1 0x3a1e1ab7)libc ++ abi.dylib:终止于   NSException类型的未捕获异常

9 个答案:

答案 0 :(得分:42)

  

我想您可能忘记将该类设为GMSMapView委托。 ()之后的GMSMapViewDelegate位需要在<>

之间

我没有指定该委托以及谷歌基本代码不分配它。 我很幸运地设法让它发挥作用。 Google地图上的Google文档说明了以下内容:

  

选择您的项目,而不是特定目标,然后打开“构建设置”选项卡。   在Other Linker Flags部分中,添加-ObjC。如果看不到这些设置,请将Build Settings栏中的过滤器从Basic更改为All。

但他们的示例项目,经过我的检查,已经设定了目标标志。在我的案例中,在我的项目中的构建目标上设置它有帮助,我发布的代码工作正常。

答案 1 :(得分:12)

在项目中添加-ObjC 去: 点击你的项目 - >目标 - >构建设置 - >搜索(其他链接标志) - >设置(-ObjC) 参考屏幕截图: Linker Flag

答案 2 :(得分:10)

你很可能忘记这样做了:(如谷歌文档中所述)

选择您的项目,而不是特定目标,然后打开“构建设置”选项卡。     在Other Linker Flags部分中,添加-ObjC。如果看不到这些设置,请将Build Settings栏中的过滤器从Basic更改为All。

答案 3 :(得分:4)

我有同样的错误,因为我错误地写了-objC而不是-ObjC(带有大写O)

如果有人帮助

答案 4 :(得分:3)

重要的是要注意,您应该将-ObjC添加到项目中的Other Linker Flags部分....不在您的特定目标中。

答案 5 :(得分:2)

其他人在Google的文档

中提到了以下部分
  

选择您的项目,而不是特定目标,然后打开“构建设置”选项卡。在Other Linker Flags部分中,添加-ObjC。如果看不到这些设置,请将Build Settings栏中的过滤器从Basic更改为All。

然而,直到我将-ObjC标志添加到我的项目'Other Linker Flags'部分,而不是目标'Other Linker Flags'部分,才能解决无法识别的选择器错误。

答案 6 :(得分:0)

我想您可能忘记将该类设为GMSMapView委托。 ()之后的GMSMapViewDelegate位需要在<>

之间
@interface StructuredGeocoderViewController () GMSMapViewDelegate

@end

@implementation StructuredGeocoderViewController {
  GMSMapView *_mapView;
  GMSGeocoder *_geocoder;
}

- (void)viewDidLoad {
  [super viewDidLoad];
  GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:-33.868
                                                          longitude:151.2086
                                                               zoom:12];

  _mapView = [GMSMapView mapWithFrame:CGRectZero camera:camera];
  _mapView.delegate = self;

  _geocoder = [[GMSGeocoder alloc] init];

  self.view = _mapView;
}

答案 7 :(得分:0)

如果您想将其提交到商店或测试航班,也会将标志-ObjC放入发行版enter image description here

答案 8 :(得分:0)

您只需要做很少的修改。

  1. 将自定义UIView的类名称命名为“ GMSMapView”。
  2. 然后为您的课程做一个出口。

    @IBOutlet var locationMapView:GMSMapView!

  3. 在ViewDidLoad()中添加以下代码。

    让相机= GMSCameraPosition.camera(纬度:10.1518,经度:76.3930,缩放:6.0)