ios - GMSGeocoder iOS SDK - 没有收到反向地理编码的回调

标签 ios google-maps google-maps-sdk-ios reverse-geocoding

我正在滚动浏览 Assets 组中的每个 Assets ,并尝试从 Google Maps sdk 1.9.1 中使用的图像的现有数据中检索位置。这是我写的代码

-(NSString *) doRevGeoCodingForLocationWithLat:(double)lat AndLon:(double)lon {
__block NSString *finalAddress = nil;
GMSGeocoder *sharedInstance = [[GMSGeocoder alloc] init];
if (sharedInstance) {
    dispatch_semaphore_t sema = dispatch_semaphore_create(0);
    CLLocationCoordinate2D coordinate = CLLocationCoordinate2DMake(lat, lon);
    GMSReverseGeocodeCallback handler = ^(GMSReverseGeocodeResponse *response, NSError *error) {
        if (!error && response) {
            NSLog(@"Mil gaya");
            GMSAddress *firstAddress = [response firstResult];
            NSString *formattedAddress = nil;
            if (firstAddress.locality)
                formattedAddress = [NSString stringWithString:firstAddress.locality];

            if (firstAddress.administrativeArea) {
                if (formattedAddress)
                    formattedAddress = [formattedAddress stringByAppendingFormat:@", %@", firstAddress.administrativeArea];
                else
                    formattedAddress = [NSString stringWithString:firstAddress.administrativeArea];
            }
            if (firstAddress.country) {
                if (formattedAddress)
                    formattedAddress = [formattedAddress stringByAppendingFormat:@", %@", firstAddress.country];
                else
                    formattedAddress = [NSString stringWithString:firstAddress.country];
            }
            if (formattedAddress) {
                finalAddress = [NSString stringWithString:formattedAddress];
            }
        }
        dispatch_semaphore_signal(sema);
    };

    [sharedInstance reverseGeocodeCoordinate:coordinate completionHandler:handler];
    dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
}
return finalAddress;
}

问题是 completionHandler 回调从不从 SDK 回调。 我已经设置了 google APIs 控制台,并且与 sdk 捆绑在一起的演示应用程序运行良好。

我从文档中了解到在应用程序的主队列上调用了 completionHandler。问题是否会发生,因为此操作是在通过 Assets 枚举的并发队列上发生的? 任何帮助将不胜感激。

最佳答案

Arc 正在立即释放您忠实的 Geocoder 变量,并且无法进行任何异步调用。

作为测试/hack,将 sharedInstance 设置为全局,以便保留它。

关于ios - GMSGeocoder iOS SDK - 没有收到反向地理编码的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27545800/

相关文章:

ios - 将当前导航 Controller 替换为另一个导航 Controller

ios - 静态库中的 ENABLE_BITCODE

ios - 在iOS应用上将美国城市居中

iphone - 如何从以下方法获取新位置

ios - Flutter FCM iOS 问题 - 在检索 FCM token 之前未设置 APNS 设备 token

html - iOS 打开与 map 应用程序的链接

android - 如何在 Android Maps v2 api 的标记上强制重新加载 InfoWindow?

javascript - 如何避免 $digest 在测试过程中已经在进行中

ios - 如何识别哪个 GMSMarker 被点击 - iOS, Swift

ios - 如何在 mapview 上显示一个显示行车方向的箭头