检测解析类中更改的更好方法是?

时间:2015-07-06 23:45:57

标签: ios parse-platform traffic

目前我设置了一个计时器,每2秒对一个解析类进行查询,以查看是否有任何数据发生了变化。如果数据已更改,则调用refreshData方法,以便使用新的解析数据更新我的视图。 因此,当在解析类中更新数据时,它几乎会立即在应用程序中更新。

问题是这会导致大量不必要的网络流量,我需要避免这种情况。

如何在解析类中检测数据更改的时间替换计时器,然后告诉应用程序调用{​​{1}}方法?

2 个答案:

答案 0 :(得分:3)

afterSave Triggers

    //this will trigger everytime the className objects has changed
Parse.Cloud.afterSave("className", function(request) {
    //Do some stuff here //like calling http request or sending push 'data has changed' to installed mobile device
        console.log("Object has been added/updated"+request.object.id);

});

https://parse.com/docs/js/guide#cloud-code-aftersave-triggers

您需要先部署一个云代码,然后才能解决您的问题: - )

在某些情况下,您可能希望在保存对象后执行某些操作,例如推送。您可以通过使用afterSave方法注册处理程序来完成此操作。例如,假设您要跟踪博客帖子上的评论数量。您可以通过编写如下函数来实现:

Parse.Cloud.afterSave("Comment", function(request) {
  query = new Parse.Query("Post");
  query.get(request.object.get("post").id, {
    success: function(post) {
      post.increment("comments");
      post.save();
    },
    error: function(error) {
      console.error("Got an error " + error.code + " : " + error.message);
    }
  });
});

在处理程序终止后,客户端将收到对保存请求的成功响应,无论它如何终止。例如,即使处理程序抛出异常,客户端也会收到成功的响应。运行处理程序时发生的任何错误都可以在Cloud Code日志中找到。

如果要在Parse JavaScript SDK中使用afterSave作为预定义类(例如Parse.User),则不应为第一个参数传递String。相反,你应该自己传递这个类。

答案 1 :(得分:1)

我不确定我的解决方案是否符合您的需求,但在 CloudCode 中使用beforeSave触发器,结合 DirtyKeys 将为您节省时间和查询:http://blog.parse.com/learn/engineering/parse-objects-dirtykeys/

使用 DirtyKeys ,您可以检测到您的课程完成了一些更改,然后您可以构建新的触发器,并在完成后执行您需要的任何操作。