谷歌地图iOS SDK崩溃

3

我使用带有Storyboard的Google Maps iOS SDK。应用程序从导航视图控制器开始,该控制器具有具有地图的根视图控制器。

@implementation MyViewController
@synthesize btnMyLock;
@synthesize btnNearby;

GMSMapView *mapView_;
- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
GMSCameraPosition *camera = [GMSCameraPosition cameraWithLatitude:20
                                                        longitude:20
                                                             zoom:0];

     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 setIcon:[UIImage imageNamed:@"pin"]];
     marker.position = CLLocationCoordinate2DMake(-33.86, 151.20);
     marker.title = @"Sydney";
     marker.snippet = @"Australia";
     marker.map = mapView_;

     mapView_.settings.compassButton = YES;

     [mapView_ addSubview:btnMyLock];
     [mapView_ addSubview:btnNearby]; 
}

按钮btnMyLock推动表视图控制器。在iOS 7中,这是可以的。但是在iOS 6中,我的应用程序会崩溃。有时会出现EXC_BAD_ACCESS(code=1)或code=2的错误。


我什么也没做,但应用程序却在运行。 - Bogdan Korda
4个回答

1

我使用了Autolayout视图,遇到了问题。


1
我没有使用自动布局,但是我的应用程序在地图界面时会随机崩溃。需要帮助。有人能帮帮我吗? - Abdul Yasin

0

当您使用Google地图并导航到另一个屏幕时,请使用此代码以确保其不会崩溃。

- (void)dealloc {
[super dealloc];
[mapView_ removeObserver:self
              forKeyPath:@"myLocation"
                 context:NULL];
}

0

我不知道它是否导致了问题,但我不会这样做:

self.view = mapView_;

只需将mapView_作为子视图添加即可,例如:
[self.view addSubview:mapView_];

一般来说,EXC_BAD_ACCESS崩溃是由于您错误地管理内存(例如,对象被过早释放)导致的。尝试找出发生崩溃的对象。
在编程中,应该通过代码创建按钮,而不是将它们作为IBOutlets从xib文件中加载。否则,由于你没有使用xib文件,这些按钮将无法被加载。

这是来自谷歌地图SDK教程。谷歌地图SDK当我注释掉self.view = mapView_时,它就可以工作了。 - Bogdan Korda
如果您将视图添加为子视图,就像我发布的代码一样,是否仍会崩溃? 您的按钮是如何创建的? - Roland Keesom
@RolandKeeson 我修复了这个 bug。按钮是输出口。我什么都没做,就这样。神奇。 - Bogdan Korda

0

你忘记了第四步:“从资源文件夹中拖动GoogleMaps.bundle”到你的项目中。

我建议将它放在框架组中。在提示时,请确保未选择“将项目复制到目标组文件夹中”。我遇到了同样的问题,这个方法解决了它。


项目中存在GoogleMaps.bundle。我将其添加进去时没有选择“复制”选项。在iOS 7上能够正常工作,但在iOS 6上会崩溃。 - Bogdan Korda

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接