2015-10-15 63 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