将位置数据POST到服务器接收多个条目

时间:2015-10-08 14:20:35

标签: ios swift alamofire

我有一个使用AlamoFire将经度/纬度发送到服务器的iPhone应用程序。按下按钮时,数据将从应用程序发送。除了服务器从一个动作接收相同数据的多个条目之外,一切都很好。我可以在模拟器输出和服务器中看到这一点。它似乎是随机的,有时是3个条目,2个或只是1个。 使用swift 2.0,这是代码:

using (var client = new WebClient())
{
    var uri = "https://api.myjson.com/bins/2hxei";
    var result = System.Text.Encoding.Default.GetString(client.DownloadData(uri));

    // result : {"A":"Z","B":{"C":"Y","D":"X"}}
}

xcode的输出:

func locationManager(manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
    print("inside didUpdateLocations", terminator: "")

    let latestLocation = locations.last
    let coords = latestLocation!.coordinate
    print("Latitude: " + coords.latitude.description + " Longitude: " + coords.longitude.description, terminator: "")

    locationManager.stopUpdatingLocation()

    // **UPDATED HERE**
    locationManager.delegate = nil

    let recievedData : CLLocation! = nil

    if recievedData == nil {
    sendDatatoServer(coords.longitude, latitude: coords.latitude, date: dateString)
}}  // **End UPDATE**

func locationManager(manager: CLLocationManager, didFailWithError error: NSError) {
    print("Error while updating location: " + error.localizedDescription, terminator: "")
}
@IBAction func findMyLocation(sender:AnyObject) {
    print("inside findMyLocation", terminator: "")
    locationManager.delegate = self
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters
    locationManager.requestWhenInUseAuthorization()
    locationManager.startUpdatingLocation()
}
// send the longitude, latitude, and date to the database server
func sendDatatoServer(longitude: Double!, latitude: Double!, date: String!) {
    print("inside sendDataToServer", terminator: "")
    Alamofire.request(.POST, "http://example.com", parameters:["latitude": latitude, "longitude": longitude, "date": date])
}

来自数据库:

ID:622 --->经度:28.0473。纬度:-26.2041。日期:2015-10-08 10:04 AM

ID:623 --->经度:28.0473。纬度:-26.2041。日期:2015-10-08 10:04 AM

ID:624 --->经度:28.0473。纬度:-26.2041。日期:2015-10-08 10:04 AM

在这个特定的POST中,它发送了3次。从xcode输出它看起来来自didUpdateLocations但我不明白为什么。

1 个答案:

答案 0 :(得分:0)

停止更新您的位置后,您还应将委托设置为nil。这将阻止您再次设置代理之前的任何调用。

我还建议您在调用post方法之前在您的位置周围进行一些检查,以确保您拥有有效的位置。