2015-06-18 19 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

编辑代码以反映这一点。自我必须在块内使用;-) –