2016-08-07 3 views
2

Я пытаюсь дать пользователю возможность обновить свое местоположение. Когда я пытаюсь сохранить данные, он создает дублируемую запись вместо обновления старой информации. У меня есть сервер parse heroku, развернутый в db mongolabs.Обновление объекта синтаксиса для текущего пользователя вместо создания повторяющейся записи

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() 

     } 
    } 
} 

}

ответ

0

Хорошо, я узнал, в чем была моя проблема. Моя проблема заключалась в том, что я запрашивал пользователя, а не .username.

var user = PFUser.currentUser()?.username 

Также мне нужно было установить силу для обновления элементов, а если запрос не удалось создать новый экземпляр.

  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

Оказывается point устанавливается только один раз. Попробуйте добавить следующий метод из протокола CLLocationManagerDelegate.

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

Это не изменило его. На самом деле это проблема с запросом, который я до сих пор не могу понять –

Смежные вопросы