我正在尝试使用反向地理编码,但该功能未执行,并且不确定原因..
我附上了我的代码。谢谢你的帮助
//-- 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;
}
它没有在控制台打印任何东西..所以我认为它没有输入块代码。 但我真的很困惑,为什么它不进入。再次感谢您的帮助
答案 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];
}