2015-11-02 23 views
1

我在嘗試更新PFObjects的數組。根據我的理解,fetchAll()(在其異步派生中)是更新所有對象的正確方法,因爲fetchAllIfNeeded()將僅更新沒有與它們關聯的數據的PFObjects。但是,每次執行fetchAll()時,無論是否進行任何更改,都會再次下載PFObjects的整個列表。例如,如果我有一個帖子列表,並且我想檢查是否對這些帖子進行了任何編輯,則在任何情況下都會下載整個帖子(文本,圖片等),無論如何一篇文章的文本是否經過簡單編輯,或者甚至是否有任何修改。在下載一個PFObject的一個屬性的文本並下載它們的整個數組(包括圖片)時,數據消耗有很大的差異,所以我想找到一種只會下載更改的方法。這可能嗎?從Parse中僅獲取不同的數據

此外,如果這是可能的,有沒有一種方法可以得到需要更新的PFObjects列表?即如果帖子4和12需要更新20個數組,我怎麼能知道這個?

謝謝。

+0

使用fetchall做,因爲它的名字所暗示的 - 獲取的所有對象。您可以針對'updatedAt'列使用PFQuery來檢索自某個日期/時間以來已更新的對象。你需要在本地跟蹤你的更新日期/時間 – Paulw11

+0

但是,有什麼辦法只下載已經改變了服務器端的對象嗎? – Acoop

+0

是的,在最後一次檢查後發出具有'updatedAt'時間的對象的PFQuery。響應將是已更新的對象。 – Paulw11

回答

1

fetchAll按照其名稱所暗示的那樣提取所有對象。您可以對updatedAt列使用PFQuery來檢索自某個日期/時間以來已更新的對象。你需要跟蹤你上一次更新日期/時間在本地,說NSUserDefaults的使用 -

let query=PFQuery.queryWithclassName("MyClass") 

let defaults=NSUserDefaults.standardUserDefaults() 

if let lastUpdateDate=defaults.objectForKey("lastUpdateDate") as? NSDate { 
    q.whereKey("updatedAt",greaterThan:lastUpdateDate) 
} 

q.findObjectsInBackgroundWithBlock({(objects:[AnyObject]!, error: NSError!) in 
     if(error == nil) { 

      defaults.setObject(NSDate(),forKey:"lastUpdateDate") 

      for object in objects { 
       ... 
      } 
     } else { 
      //Do something with error 
     } 
}) 
+0

@Acoop請注意,我最初有'lessThan',這應該是'greaterThan' – Paulw11

相關問題