如何允许多个用户更新解析对象?

时间:2015-11-26 00:51:36

标签: ios swift object parse-platform updating

我正在构建一个需要进行民意测验的iOS应用。我使用解析作为后端。一个示例民意调查将是总统候选人的支持率。我建立的方式是每个总统候选人都有自己的对象,其中一个属性是“得分”。现在,用户可以为此分数添加或减少值,并在解析时更新该值。这是通过以下代码完成的:

let cQuery = PFQuery(className: "score")

                    cQuery.getObjectInBackgroundWithId(canidateIDArray[canidate]!) {
                        (object, error) -> Void in
                        if error != nil {
                            print(error)
                        } else {
                            if let object = object {
                                object["score"] = object["score"] as! Int + self.score
                            }
                            object!.saveInBackground()
                        }

我担心的是,如果两个用户几乎同时更新了相同的分数会发生什么。例如,候选人的分数为10,用户更新为+2,但在另一个用户更新+3后,我希望它的总分为15.但如果第一个用户分数未保存在第二个用户提出分数请求之前,分数是仅保存为13,还是会解析两个请求的帐户?

有没有更好的方法来做到这一点,或许更新得分而不要求它首先是什么?或者解析是否可以将多个分数合并为一个如何?我希望用户只需要为每个候选人检索一个分数。感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

每次用户添加分数时都无法创建新对象,并在想要获得分数时添加所有对象吗?

虽然这使得提取更困难,但您不需要获取分数=> add score =>提交分数。

您只需要创建一个新的分数对象。此外,它可以更容易地跟踪个人玩家在整个游戏中的得分。

答案 1 :(得分:1)

Parse不知道你是否要加分或减去分数。想象一下,用户1在用户2之前查询对象,但是在用户2更新得分之后没有 - 然后他们在对象上都有10个。用户1想要添加3,用户2想要添加2.用户1将发送保存请求为13,用户2将发送另一个12。无论哪个请求最后处理将是最终得分,它赢得了#39 ; t是15。

我的建议是,您创建一个CloudCode,将加法和减法放入队列并处理它们,而不是允许用户直接写入最终值。

或者您可以为每次加法和减法添加记录,但是每次使用这些记录都必须计算得分(您也可以使用CloudCode)