2012-05-24 65 views
25

坐标我试图地理编码地址转换成使用坐标下面的代码:地理编码地址转换成iphone

CLGeocoder *geocoder = [[CLGeocoder alloc] init]; 
    [geocoder geocodeAddressString:@"6138 Bollinger Road, San Jose, United States" completionHandler:^(NSArray* placemarks, NSError* error){ 
        for (CLPlacemark* aPlacemark in placemarks) 
        { 
         // Process the placemark. 
         NSString *latDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.latitude]; 
         NSString *lngDest1 = [NSString stringWithFormat:@"%.4f",aPlacemark.location.coordinate.longitude]; 
         lblDestinationLat.text = latDest1; 
         lblDestinationLng.text = lngDest1; 
        } 
       }]; 

我已经尝试过很多次,但调试器永远不会进入该块,我不能够获得位置。有人可以帮助我吗?

问候
潘卡

+0

太感谢了,半天我得从你的问题解决后消费。所以一个UP和星标记你的问题。再次感谢。 –

+0

如何将经纬度保存在此块以外的变量中?因为我需要将它们传递给另一个控制器。 – user3722523

+0

@ user3722523您必须在块外定义一个变量并将其标记为__block。现在您可以访问块内的变量,并可以将值保存到此变量中。 – pankaj

回答

10

好吧,我发现我的错误。代码是正确的,并且工作完美。我一直在做这件事的时候都是通过调试器,并试图找出调试器没有进入该块的原因。但是现在我发现调试器在那一刻不会进入该块。获取位置值几乎不需要。它是异步完成的,所以我无法找到它,并且因为撞车后没有任何值而崩溃。我已经将我的代码帖子块移动到块内部,现在一切正常。

0

我只是跑了确切的代码和它的工作如预期。确保你有一个有效的互联网连接。

尝试在字符串上添加NSLog,看它是否被调用。

NSLog(@"lat: %@, lng: %@", latDest1, lngDest1); 

你在模拟器或设备上运行它吗?

0

块是从iOS4.0开始向Objective C提供的新功能。一个块可以想象成一个委托方法,在同一个功能块中工作。至于任何委托方法,需要时间来调用,取决于条件,当它完成其地理编码工作时,块将执行其中的代码。您可以在苹果文档中阅读更多关于Block的内容,或阅读http://www.raywenderlich.com/9438/how-to-use-blocks-in-ios-5-tutorial-part-2

您也可以看看我的仓库在github https://github.com/Mangesh20/geocoding