2015-10-15 61 views
0

我有一個Parse Cloud Code函數,它是一個簡單查詢來詢問根對象並獲取其子對象及其子對象(3層對象層次結構)。雲端函數根據平臺返回不同的結果

Set 
|--> Group 
    |--> Item 

我做這種方式,因爲Set可能已經在設備上,我無法找到一個可靠的方法,以確保我有最新的副本。 fetchInBackground...可能工作,除非你不能做include,我需要做的,以獲得兒童/孫子女。 (我不明白爲什麼Parse沒有添加這個功能,我不能告訴你我有多少次想說「更新這個對象,包括這些子對象」!)

無論如何,雲代碼函數正在工作,但產生奇怪的結果:

  1. 當我從REST API控制檯運行查詢時,我得到了所有我期望的數據。具體來說,我得到屬於該集合的1 Set,3 Group對象以及屬於每個GroupItem對象。具體而言,Set的第3個Group包含67個對象。
  2. 當我從iOS設備(或模擬器)運行查詢時,第3個Group始終以51 Item對象返回。有趣的是,在服務器上更新數據模型之前,此WAS爲true。

因此,儘管我盡了最大的努力,似乎無法更新已固定在設備上的數據模型,以反映已在服務器上進行的更改。我有什麼要求REALLY令人困惑的是,儘管調用了Cloud Code函數,但返回了設備上的數據模型。

我假設當從函數返回對象時,它會看到該對象已被固定並且不包含來自服務器的新數據。我無法弄清楚的是如何解決這個問題。我希望數據固定,因爲我不想管理自己的本地數據存儲(儘管我想我會在必要時)。我試過在調用雲代碼函數之前卸下Set對象,但即使我同步運行unpin調用,也不會改變結果。

我剛剛花了幾個小時試圖做我自己刷新序列,像這樣:

  1. 刷新Set
  2. 反覆調整SetGroup對象,刷新他們
  3. 反覆調整Item對象每個Group,刷新它們

雖然這似乎工作得很好該進程正在執行,一旦到達進程結束,第二和第三級數據不會保留。

我覺得這應該是一個微不足道的實現。很多人都要求這個功能。有沒有人基本上想出瞭如何執行一個「包含獲取」?

回答

0

如果您有要更新的setobject ID,則可以在set類上創建查詢,並限制object ID。然後,您可以使用includeKey:方法獲取相關數據,然後獲取數據。

另一種選擇是首先獲取set對象,然後獲取其子對象。然而,這將需要多個嵌套的網絡請求。

+0

這正是我在我的問題中所描述的。當我這樣做時,我找回的對象似乎被棄用在本地數據存儲中的項目。 – mbm29414

+0

您是否嘗試過對象ID查詢?我也會嘗試重新安裝應用程序(在手機上刪除),看看你的LDS是否有壞的數據。 – hhanesand

+0

是的。似乎沒有辦法忽略本地數據存儲中已有的結果。我不能簡單地做一個fetchInBackground,因爲它不允許我得到孩子,尤其是大的孩子對象。 – mbm29414