2016-08-07 2 views
2

Ich versuche, den Benutzer ihren Standort aktualisieren zu lassen. Wenn ich versuche, die Daten zu speichern, erstellt es einen doppelten Eintrag, anstatt die alten Informationen zu aktualisieren. Ich habe einen Heroku-Parse-Server auf einer Mongolabs-Datenbank bereitgestellt.Pars-Objekt für den aktuellen Benutzer aktualisieren, anstatt doppelten Eintrag zu erstellen

class DropLoc: UIViewController, CLLocationManagerDelegate { 

var user = PFUser.currentUser() 
var post = PFObject(className:"Post") 
var query = PFQuery(className:"Post") 
var point: PFGeoPoint! 
let porta = CLLocationManager() 


override func viewDidLoad() { 
    super.viewDidLoad() 


    var curGate = porta.location 

    self.porta.delegate = self 
    self.porta.desiredAccuracy = kCLLocationAccuracyBest 
    self.porta.requestWhenInUseAuthorization() 
    self.porta.startUpdatingLocation() 
    point = PFGeoPoint(location: curGate) 


    query.whereKey("user", equalTo: user!) 
    query.findObjectsInBackgroundWithBlock {(objects: [PFObject]?, error: NSError?) -> Void in 
     if error != nil { 
      print(error) 
     }else{ 
      self.post["user"] = self.user ?? NSNull() 
      self.post["location"] = self.point ?? NSNull() 
      self.post.saveInBackground() 

     } 
    } 
} 

}

Antwort

0

Ok Ich habe herausgefunden, was mein Problem war. Mein Problem war, dass ich Benutzer und nicht .username abgefragt habe.

var user = PFUser.currentUser()?.username 

Auch ich musste die erzwingen die Elemente zu aktualisieren und wenn die Abfrage fehlschlägt erstellen Sie eine neue Instanz.

  query.whereKey("user", equalTo: user!) 
    query.getFirstObjectInBackgroundWithBlock() {(uobject: PFObject?, error: NSError?) -> Void in 
     if error != nil { 
      self.post["user"] = self.user ?? NSNull() 
      self.post["location"] = self.point ?? NSNull() 
      self.post.saveInBackground() 
     }else if let uobject = uobject{ 
      uobject["user"] = self.user ?? NSNull() 
      uobject["location"] = self.point ?? NSNull() 
      uobject.saveInBackground() 
     } 

    } 
0

Es scheint point nur einmal festgelegt ist. Versuchen Sie, die folgende Methode aus dem Protokoll CLLocationManagerDelegate hinzuzufügen.

func locationManager(manager: CLLocationManager, didUpdateToLocation newLocation: CLLocation, fromLocation oldLocation: CLLocation) { 
     // updated coordinate 
     point = PFGeoPoint(location: manager.location!)   
} 
+0

Dies hat es nicht geändert. Es ist tatsächlich ein Problem mit der Abfrage, die ich immer noch nicht herausfinden kann –

Verwandte Themen