关于ZAKER 融媒体解决方案 合作 加入

ios- 在 iPhone 的 GoogleMaps 上获取我的位置时崩溃

CocoaChina 11-12

我写信是因为我陷入了一个非常奇怪的错误 .

我试图在我的应用程序上添加 GMS, 最后 , 当我必须获取设备位置时 , 我陷入了此崩溃:

由于未捕获的异常 " NSInternalInconsistencyException" 而终止应用程序 , 原因:" 已释放分配了 GMSMapView 类的实例 0x7ff7fd82def0, 同时仍向其注册了键值观察器 . 当前观察信息:

? 上下文:0x0, 属性:0x7ff7fdc2f470>

代码在这里初始化:

self.mapView.myLocationEnabled = YES;self.mapView.mapType = kGMSTypeNormal;self.mapView.settings.compassButton = YES;self.mapView.settings.myLocationButton = YES;//=> Listen to the myLocation property of GMSMapView. [ self.mapView addObserver:self forKeyPath:@"myLocation" options:NSKeyValueObservingOptionNew context:NULL ] ;- ( void ) observeValueForKeyPath: ( NSString * ) keyPath ofObject: ( id ) object change: ( NSDictionary * ) change context: ( void * ) context{if ( [ keyPath isEqualToString:@"myLocation" ] && [ object isKindOfClass: [ GMSMapView class ] ] ) { appDelegate ( ) .curUserLocation = [ change objectForKey:NSKeyValueChangeNewKey ] ; [ self.mapView animateToCameraPosition: [ GMSCameraPosition cameraWithLatitude:self.mapView.myLocation.coordinate.latitude longitude:self.mapView.myLocation.coordinate.longitude zoom:15 ] ] ;}}

仍然没有成功 . 我在 observerValueForKey 方法中放置了断点 , 一旦离开这里 , 就会出现崩溃 . 没有办法知道 .

我还删除了观察者:

- ( void ) viewWillDisappear: ( BOOL ) animated{ [ super viewWillDisappear:animated ] ; [ self.mapView removeObserver:self forKeyPath:@"myLocation" ] ;//=> Set map delegate to nil ( to avoid: mapView:regionDidChangeAnimated: ] : message sent to deallocated instance ) self.mapView.delegate = nil;self.mapView = nil;}

并没有成功 .

谁能帮我这个 ?我尝试了所有可能的解决方案 , 但没有办法 .

提前致谢!

最佳答案

在评论中怎么说?.GMSMapView 必须强

如果您不调用 requestWhenInUseAuthorization, 则您的代码将无法在 iOS 8 中使用

我建议您仅使用 CLLocationManager 而不是 KVO … , 但这是您的决定 .

Attached my example- 我用 2 个示例修改了 Google 示例…

> 使用 KVO

> 仅适用于 CLLocationManager

如果您有任何问题…请让我知道

PS 别忘了添加您的 API 密钥

编码愉快!

更新

如果您启动了 StartUpdatingLocation .. 不要忘了使用 stopUpdatingLocation .. 在某个地方停止它 . 在 ViewDidDisapear 中说

以上内容由"CocoaChina"上传发布 查看原文