2

我正在尝试使用反向地理编码,但该功能没有执行,也不确定为什么..

在这里,我附上了我的代码。感谢您的帮助

//-- 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;
}

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

4

2 回答 2

1

我似乎记得NSLog在传递给reverseGeocodeLocation. 地理编码器在一个单独的线程上执行,正如我期望的块一样。(如果我错了,我相信有人会纠正我)。就我而言,我认为`UIAlertView 即使在块代码中也能正常工作,所以你可以试试......

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

于 2012-05-14T17:52:26.207 回答
0

可能 self.geocoder = nil?

代替

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

if(!self.geocoder)
{
    self.geocoder = [[CLGeocoder alloc] init];
}
于 2012-05-14T17:47:44.490 回答