2012-05-24 63 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