我正在构建一个需要进行民意测验的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,还是会解析两个请求的帐户?
有没有更好的方法来做到这一点,或许更新得分而不要求它首先是什么?或者解析是否可以将多个分数合并为一个如何?我希望用户只需要为每个候选人检索一个分数。感谢您的帮助!
答案 0 :(得分:1)
每次用户添加分数时都无法创建新对象,并在想要获得分数时添加所有对象吗?
虽然这使得提取更困难,但您不需要获取分数=> add score =>提交分数。
您只需要创建一个新的分数对象。此外,它可以更容易地跟踪个人玩家在整个游戏中的得分。
答案 1 :(得分:1)
Parse不知道你是否要加分或减去分数。想象一下,用户1在用户2之前查询对象,但是在用户2更新得分之后没有 - 然后他们在对象上都有10个。用户1想要添加3,用户2想要添加2.用户1将发送保存请求为13,用户2将发送另一个12。无论哪个请求最后处理将是最终得分,它赢得了#39 ; t是15。
我的建议是,您创建一个CloudCode,将加法和减法放入队列并处理它们,而不是允许用户直接写入最终值。
或者您可以为每次加法和减法添加记录,但是每次使用这些记录都必须计算得分(您也可以使用CloudCode)