2016-07-31 13 views
0

Ich verwende Parse Server auf AWS. Daten werden auf mlab gespeichert. Bei App-Start mache ich eine Abfrage:Parse - Herunterladen nur aktualisierter Datenzeilen

let query = PFQuery(className: foodDataClassName_) 
    query.findObjectsInBackgroundWithBlock({(objects : [PFObject]?,error : NSError?) -> Void in 

      }) 

Es gibt mir alle Zeilen von Daten zurück. Ich speichere sie lokal mit CoreData. Wenn eine Datenzeile aktualisiert wird, lösche ich die zuvor lokal gespeicherten Daten und lade alle Daten erneut herunter und speichere sie. Dies ist kein guter Ansatz. Was ich will, ist, dass ich nur die Zeilen herunterladen, die nicht alle Zeilen aktualisiert werden. Wie kann ich das erreichen? Vielen Dank.

+0

Diese Frage lesen kann, scheint nichts mit Kerndaten oder Mongo zu tun ... – Wain

Antwort

1

, was Sie tun können, ist die folgende:

Das erste Mal, wenn der Benutzer-Log-in, um Ihre Anwendung benötigen Sie für alle Benutzer Zeilen vom Server abzufragen, so dass in diesem Fall, dass Sie die Abfrage ohne jede Bedingung ausgeführt wird . In dieser Abfrage können Sie Limit verwenden, um die Ergebnisse zu begrenzen, die vom Server zurückgegeben werden. Wenn Sie die Ergebnisse vom Server erhalten Sie müssen:

  • Shop alle Zeilen in Ihrer lokalen Datenbank
  • Speichern Sie die aktuellen NSDate innerhalb NSUserDefaults

Der nächste Aufruf zu Ihrem Server zu bekommen, nur die aktualisierten Zeilen. Um es zu erreichen, müssen Sie:

  • den letzten Synchronisierung Zeitpunkt von Ihrem NSUserDefaults Erhalten Sie (die, die wir oben speichern)
  • die Abfrage ausführen, aber dieses Mal mit einer Bedingung von greaterThan Ihre lastSyncDate

am Ende der Code die Einzelteile zu holen wie folgt aussehen sollte:

// check if we synced the date before 
    let lastSyncDate = NSUserDefaults.standardUserDefaults().objectForKey("lastSyncDate") 
    let query = PFQuery(className: "MyParseObjectClassName") 

    if (lastSyncDate != nil){ 
     // get only records that were created/updated since the last sync date 
     query.whereKey("updatedAt", greaterThan: lastSyncDate!) 
    } 

    query.findObjectsInBackgroundWithBlock { 
     (objects: [PFObject]?, error: NSError?) -> Void in 

     // store objects in parse local data store 
     if (objects?.count > 0){ 
      PFObject.pinAllInBackground(objects) 
     } 

     // save the last sync date in user defaults 
     NSUserDefaults.standardUserDefaults().setValue(NSDate(), forKey: "lastSyncDate") 
     NSUserDefaults.standardUserDefaults().synchronize() 

    } 

Bitte notieren Sie Hier habe ich Pars lokalen Datenspeicher verwendet, mit dem Sie leicht Parse-Objekte in Ihre lokale Datenbank speichern können, ohne Kerndaten zu verwenden. Das Analysieren des lokalen Datenspeichers wird durch das Parsing von iOS SDK bereitgestellt und spart viel Zeit und Aufwand für Sie. Daher empfehle ich Ihnen dringend, es zu nutzen. Der lokale Datenspeicher kümmert sich auch um Objekte, die erstellt/aktualisiert wurden, und erstellt automatisch neue Objekte und aktualisiert bestehende.

Sie mehr darüber in here