反向地理编码功能没有执行?

时间:2012-05-14 17:08:50

标签: ios ios5 geocoding reverse-geocoding

我正在尝试使用反向地理编码,但该功能未执行,并且不确定原因..

我附上了我的代码。谢谢你的帮助

//-- reverse geocode, converting from point to address 
- (BNRMapPoint *)geocodeLocation:(CLLocation *)location title:(NSString *)title

{
    if(!geocoder)
    {
        geocoder = [[CLGeocoder alloc] init];
    }

    __block BNRMapPoint * annotation;

    [self.geocoder reverseGeocodeLocation:location completionHandler: 
     ^(NSArray * placeMarks, NSError * errors)
     {
         NSLog(@"in block code");
         if([placeMarks count] > 0)
         {
             NSLog(@"%@", [placeMarks objectAtIndex:0]);
             annotation = [[BNRMapPoint alloc] initWithCoordinate:location.coordinate title:title
                                                    placeMark:[placeMarks objectAtIndex:0]];
             NSLog(@"%@", annotation.placeMark.name);
         }
         else
         {
             NSLog(@"failed!!");
         }

     }];

    return annotation;
}

它没有在控制台打印任何东西..所以我认为它没有输入块代码。 但我真的很困惑,为什么它不进入。再次感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我似乎记得在传递给NSLog的块中遇到reverseGeocodeLocation的问题。 Geocoder在一个单独的线程上执行,我期望的块也是如此。 (我相信如果我错了,有人会纠正我)。在我的情况下,我认为`UIAlertView甚至在块代码中工作,所以你可以试试......

我根据我使用reverseGeocodeLocation的应用程序审核了您的代码,但我发现您的代码没有问题。唯一的区别是我在执行reverseGeocode之前检查了if (![geocoder isGeocoding])...。这只是为了防止geoCoder调用堆叠,这可能在您的应用中无法实现,具体取决于代码的调用方式。

答案 1 :(得分:0)

可能是self.geocoder = nil?

替换

if(!geocoder)
{
    geocoder = [[CLGeocoder alloc] init];
}

if(!self.geocoder)
{
    self.geocoder = [[CLGeocoder alloc] init];
}