云功能根据平台返回不同的结果

时间:2015-10-15 17:50:11

标签: ios parse-platform cloud-code

我有一个Parse Cloud Code函数,它是一个简单的查询,用于询问根对象并获取其子对象及其子对象(3层对象层次结构)。

Set
|--> Group
     |--> Item

我这样做是因为Set可能已经在设备上,我找不到可靠的方法来确保我有最新的副本。 fetchInBackground...可能会有效,除非您无法执行我需要做的include以获得子女/孙子女。 (我无法弄清楚为什么Parse没有添加这个功能。我不能告诉你有多少次我想说“更新这个对象,包括这些子对象”!)

无论如何,Cloud Code功能正在运行,但会产生奇怪的结果:

  1. 当我从REST API控制台运行查询时,我得到了我期望的所有数据。具体来说,我得到1 Set,属于该集合的3 Group个对象,以及属于每个Item的{​​{1}}个对象。具体而言,Group的第3 Group个包含67个Set个对象。
  2. 当我从iOS设备(或模拟器)运行查询时,第3个Item始终返回51个Group个对象。有趣的是,在服务器上更新数据模型之前, WAS 为真。
  3. 因此,尽管我付出了最大的努力,但我似乎无法更新已固定在我的设备上的数据模型,以反映在服务器上所做的更改。让我真的困惑的是,尽管调用了Cloud Code功能,但仍会返回设备上的数据模型。

    我假设当从函数返回对象时,它会看到该对象已被固定,并且未包含来自服务器的新数据。我无法弄清楚的是如何解决这个问题。我希望数据固定,因为我不想管理我自己的本地数据存储(虽然我想我会在必要时)。我在调用Cloud Code函数之前尝试取消固定Item对象,但即使我同步运行Set调用,也不会改变结果。

    我花了几个小时尝试自己刷新序列,如下所示:

    1. 刷新unpin
    2. 迭代Set的{​​{1}}个对象,刷新它们
    3. 迭代每个Group的{​​{1}}个对象,刷新它们
    4. 虽然这似乎在流程执行时运行良好,但是一旦我到达流程结束,第二级和第三级数据就不会被保留。

      我觉得这应该是一个微不足道的实现。很多人都要求这个功能。有没有人基本弄明白,如何执行“带包含的提取”?

1 个答案:

答案 0 :(得分:0)

如果您要更新object ID set,则可以在set类上创建查询并约束object ID。然后,您可以使用includeKey:方法获取相关数据,然后获取数据。

另一种选择是首先获取set对象,然后获取其子对象。但这需要多个嵌套网络请求。