iOS Parse.com更新对象

时间:2015-10-20 18:51:41

标签: ios objective-c parse-platform

我正在使用parse作为我的后端构建照片共享应用程序。现在,我希望在用户单击“赞”按钮后使用以下命令更新每个照片对象的numberOfLikes属性:

[photoObject incrementKey:@"numberOfLikes"];
[photoObject saveInBackground];

我的问题是,让我们说几个用户同时喜欢同一张照片,请问这些请求是否在处理队列中? (Parse会逐个处理它们吗?)假设这张照片有0个喜欢,那么5个用户同时喜欢它,鉴于网络条件相同,保存后的最终结果是1还是5?

很抱歉,如果这个问题看起来很愚蠢,或者我的描述令人困惑。我对Parse很新。感谢。

1 个答案:

答案 0 :(得分:1)

Parse中的某些函数是原子函数,incrementKey恰好是其中之一。

https://parse.com/questions/concurrency-management-in-parse

  

incrementKey方法在保存时是原子的。所以这个过程是这样的:

     

Player A调用Prize上的incrementKey方法,并尝试保存(使用回调函数。)   玩家B在奖品上调用incrementKey方法,并尝试保存(使用回调函数。)   无论是玩家A还是玩家B的回调运行,numberOfWins都是6。   剩余的玩家回调运行,numberOfWins为7。

您还可以使用这些函数实现某种锁定机制,如本问题所示。

https://parse.com/questions/locking

  

大卫的解决方案很聪明且有效(incrementKey是原子的)。如果使用“challengers”:0值创建GameRequest对象,则每个挑战者可以调用incrementKey:@“challengers”。如果在保存后,挑战者的价值是1,那么他们是第一个承诺的挑战者。我特别喜欢这个解决方案,因为它适用于N个玩家游戏。同样,您可以使用addUnique :(也是原子)将用户ID添加到挑战者列表中。

最后回答你的问题,它应该是5,因为它们是一个接一个地执行而不是同时执行。