【问题标题】:App Crash while using GMSPlace Picker in ios 9在 ios 9 中使用 GMSPlace Picker 时应用程序崩溃
【发布时间】:2023-12-18 01:10:01
【问题描述】:

当用户没有从选取器视图中选择任何位置并按下返回按钮时,GMSPlacePicker 会崩溃。

错误:

-[UIWindow _shouldAnimatePropertyWithKey:]:消息发送到释放的实例

代码:

- (void)findNearByPlace :(CLLocationCoordinate2D)center {


CLLocationCoordinate2D northEast = CLLocationCoordinate2DMake(center.latitude + 0.001,
                                                              center.longitude + 0.001);
CLLocationCoordinate2D southWest = CLLocationCoordinate2DMake(center.latitude - 0.001,
                                                              center.longitude - 0.001);
GMSCoordinateBounds *viewport = [[GMSCoordinateBounds alloc] initWithCoordinate:northEast
                                                                     coordinate:southWest];
GMSPlacePickerConfig *config = [[GMSPlacePickerConfig alloc] initWithViewport:viewport];
_placePicker = [[GMSPlacePicker alloc] initWithConfig:config];

[_placePicker pickPlaceWithCallback:^(GMSPlace *place, NSError *error) {
    if (error != nil) {
        NSLog(@"Pick Place error %@", [error localizedDescription]);
        return;
    }
    if (place != nil) {
        NSLog(@"Place name:%@",place.formattedAddress);
        placeName = place.name;
        placeAddress = place.formattedAddress;
        //hide previous marker
        self.mapMarker.map = nil;
        self.locaitonTitle = place.name;
        self.locationAddress = place.formattedAddress;
        self.mapMarker = [GMSMarker markerWithPosition:place.coordinate];
        self.mapMarker.icon = [UIImage imageNamed:@"ic_ellipse_black.png"];
        mapLattitude = place.coordinate.latitude;
        mapLongitude = place.coordinate.longitude;
        self.mapMarker.draggable = YES;
        markerTag = @"2";
        markerDefault = @"default";
        self.mapMarker.userData = @{};
        self.mapMarker.map = self.mapView_;
        [self showLocationPopUp:placeName address:placeAddress withCoord:place.coordinate];
        //[self showLocationFoundView];
    } else {

        [self addOwnLocation : longPressCoord];
        NSLog(@"No Place is selected yet");
    }
}];

}

有什么办法吗?

【问题讨论】:

  • 这与您的代码无关,它与 iOS 9 中的 GMSPlacePicker 库有关。您可以调试启用 Zombie 对象以查看已释放的内容。
  • 我已启用 zoombie 对象。但没有成功。

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


【解决方案1】:

我们遇到了同样的问题。我们的解决方案是通过隐藏导航栏来禁用Back 导航按钮。

目标-C:

[placePicker pickPlaceWithCallback:^(GMSPlace * __nullable result, NSError * __nullable error) {
    //DO SOMETHING
}];

//Hide the navigation bar
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    UINavigationController *rootViewController = (UINavigationController *)[[[UIApplication sharedApplication] keyWindow] rootViewController];
    rootViewController.navigationBarHidden = true;
});

斯威夫特:

placePicker.pickPlaceWithCallback({ (place: GMSPlace?, error: NSError?) -> Void in
    //DO SOMETHING     
})

//Hide the navigation bar
let delayTime = dispatch_time(DISPATCH_TIME_NOW, Int64(0.5 * Double(NSEC_PER_SEC)))
dispatch_after(delayTime, dispatch_get_main_queue(), { () -> Void in
     let rootViewController = UIApplication.sharedApplication().keyWindow?.rootViewController
     (rootViewController as! UINavigationController).navigationBarHidden = true
})

【讨论】:

  • 感谢您的回答。但我需要在我的应用程序中提供后退按钮功能。
  • @RituGarodia,这只是一种解决方法。我不知道它是否已经修复了。
  • 此崩溃已在 Google 地图 1.10.4 sdk 中修复。
最近更新 更多