我有一个使用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但我不明白为什么。
答案 0 :(得分:0)
停止更新您的位置后,您还应将委托设置为nil。这将阻止您再次设置代理之前的任何调用。
我还建议您在调用post方法之前在您的位置周围进行一些检查,以确保您拥有有效的位置。