2015-06-18 18 views
0

我成功地根據我的位置獲取當前地址詳細信息。它打印完美。拋出我的是我如何從這個調用中提取數據。我曾嘗試將ZIP/Postcode作爲本地甚至全局變量傳遞,但沒有喜悅。數據似乎只存在於此調用中。我怎樣才能在別處使用它?使用數據快速反向地理編碼

// Get Address Information 
    let geoCoder = CLGeocoder() 
    let newLocation = CLLocation(latitude: valueLatitude, longitude: valueLongitude) 
    geoCoder.reverseGeocodeLocation(newLocation, completionHandler: {(placemarks: [AnyObject]!, error: NSError!) in 
     if error != nil { 
      println("Geocode failed with error: \(error.localizedDescription)") 
     } 
     if placemarks.count > 0 { 
      let placemark = placemarks[0] as! CLPlacemark 
      let addressDictionary = placemark.addressDictionary 
      let address  = addressDictionary[kABPersonAddressStreetKey] as! NSString 
      let city  = addressDictionary[kABPersonAddressCityKey] as! NSString 
      let state  = addressDictionary[kABPersonAddressStateKey] as! NSString 
      let postcode = addressDictionary[kABPersonAddressZIPKey] as! NSString 
      let country  = addressDictionary[kABPersonAddressCountryKey] as! NSString 

      println("\(address) \(city) \(state) \(postcode) \(country)") } 
    }) 
+0

這是叫什麼名字? –

+0

它在IBAction內。當用戶按下保存按鈕時,會保存一個位置數據的加載。它在大約一半的時間執行這段代碼。 –

+0

奇怪的問題,你說如果你將地標對象分配給全局變量,它不起作用? –

回答

1

您的問題很可能是由於reverseGeocodeLocation是對Apple服務器發出的異步請求。

需要採取什麼措施是:

  1. 你叫reverseGeocodeLocation
  2. reverseGeocodeLocation完成,開始它的完成它調用傳遞您剛剛傷愈的標的的方法。

爲了做到這一點:

@IBAction func btnInsertClicked(sender: AnyObject) { 
    var locationRecord: LocationRecord = LocationRecord() 

    // Get Address Information 
    let geoCoder = CLGeocoder() 
    let newLocation = CLLocation(latitude: valueLatitude, longitude: valueLongitude) 
    geoCoder.reverseGeocodeLocation(newLocation, completionHandler: 
     {(placemarks: [AnyObject]!, error: NSError!) in 
      if error != nil { 
       println("Geocode failed with error: (error.localizedDescription)") 
      } 

      if placemarks.count > 0 { 
       let myPlacemark = placemarks[0] as! CLPlacemark 

       // Here call the method that uses myPlacemark 
       self.myAwesomeMethod(placemarks[0] as! CLPlacemark) 
      } else { 
       println("No placemark") 
      } 
     }) 
} 

,你需要在你的代碼中使用它:

func myAwesomeMethod(placemark: CLPlacemark) { 
    // Do stuff with placemark 
} 

我不會讓我的MAC,直到今晚,但如果那並不是」 t工作,發表評論,我們將解決這個問題

+1

就是這樣,非常感謝。已將地理編碼組件包裝到自己的func中,因此更加清潔。 –

+0

似乎想要:self.myAwesomeMethod(地標[0] as!CLPlacemark) –

+0

編輯代碼以反映這一點。自我必須在塊內使用;-) –