26

我正在尝试使用以下代码将地址地理编码为坐标:

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

我已经尝试了很多次,但调试器从不进入块,我无法获得位置。有人可以帮我吗?

问候
潘卡伊

4

3 回答 3

10

好吧,我发现了我的错误。代码是正确的并且工作完美。我一直在通过调试器处理它,并试图找出调试器没有进入块的原因。但是现在我发现调试器此时没有进入该块。获取位置值所需的时间很少。它是异步完成的,因此我无法找到它,并且由于崩溃后没有值而导致崩溃。我已将我的代码发布块移到块内,现在一切正常。

于 2012-05-24T11:24:41.953 回答
0

我刚刚运行了那个确切的代码,它按预期工作。确保您有一个有效的互联网连接。

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

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

您是在模拟器还是设备中运行它?

于 2012-05-24T11:07:14.857 回答
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上查看我的存储库

于 2012-08-08T07:15:43.737 回答