2016-07-31 13 views
0

我正在AWS上運行解析服務器。數據正在存儲在mlab上。在應用程序啓動時,我提出了一個查詢:解析 - 僅下載更新的數據行

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

      }) 

它返回所有行數據。我使用CoreData在本地保存它們。當任何一行數據更新時,我刪除以前本地存儲的數據並再次下載所有數據並保存。這不是一個好方法。我想要的是我只下載不是所有行都更新的行。我怎樣才能做到這一點?謝謝。

+0

這個問題似乎已經無關,與核心數據或蒙戈... – Wain

回答

1

你可以做的是:

第一次用戶登錄到您的應用程序,你需要從服務器查詢所有用戶的行,以便在這種情況下,你會無條件執行查詢。在此查詢中,您可以使用限制以限制服務器將返回的結果。當你從服務器得到的結果,你將需要:在您的本地數據庫

  • 存儲當前的NSDate內NSUserDefaults的

    • 商店中的所有行

    到服務器的下一次調用將得到只有更新的行。爲了實現它,你將需要:

    • 從NSUserDefaults的獲取上一次同步的日期(即我們上面保存的)
    • 執行查詢,但與GREATERTHAN您lastSyncDate的條件這段時間

    末代碼來獲取項目應如下所示:

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

    請注意這裏我使用瞭解析本地數據存儲,它允許您輕鬆地將解析對象存儲到本地數據庫,而無需使用核心數據。解析本地數據存儲是通過解析iOS SDK提供的,爲您節省大量時間和精力,所以我強烈建議您利用它。 本地數據存儲也照顧你創建/更新的對象,它會自動創建新的對象,並將更新現有的對象。

    你可以閱讀更多關於它在here