GMSGeoCoder reverseGeocodeCoordinate:completionHandler:在后台线程上

时间:2016-02-16 13:33:07

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

我需要从2个坐标(我正在使用GMSGeoCoder -reverseGeocodeCoordinate: completionHandler:方法)获取城市名称,然后对这些对象进行篡改。

问题是该方法在后台线程(不在主线程中)上运行,当我尝试比较(使用if语句)对象(userCity和{{1}时} - 两个storeCity)仍然是零。

我的代码:

NSString

有什么想法吗?谢谢!

1 个答案:

答案 0 :(得分:1)

重构代码以在完成异步任务后继续:

这样做的好处是你不会主动等待东西并阻止主线程

e.g:

- (void)checkCitiesWithCompletionBlock:(void (^)(BOOL same))
    //Checking user's city
    [[GMSGeocoder geocoder]reverseGeocodeCoordinate:self.locationManager.location.coordinate completionHandler:^(GMSReverseGeocodeResponse *response, NSError *error) {
        if (error) {
            NSLog(@"%@",[error description]);
        }
        id userCity=[[[response results] firstObject] locality];

        //Checking store's city
        [[GMSGeocoder geocoder]reverseGeocodeCoordinate:arounder.radiusCircularRegion.center completionHandler:^(GMSReverseGeocodeResponse *response, NSError *error) {
            if (error) {
                NSLog(@"%@",[error description]);
            }
            id arounderCity=[[[response results] firstObject] locality];

            same ([userCity isEqualToString:arounderCity]);
        }];
    }];
}