存储数据的最有效方式,可由所有用户访问和更改

时间:2016-10-13 14:07:22

标签: ios arrays swift

我目前正在学习Swift和Parse,而我正在问我将要对一个单元格进行简单的投票。

所以我有一个表视图控制器,它由查询到Parse上的表填充。为此,我在相关表上创建一个查询,然后将信息位存储到数组中,例如用户名,文本帖子和对象ID的数组:

var postGrabber: [PFObject] = [PFObject]()
var pSenderUsername: [String] = [String]()
var pPostBody: [String] = [String]()
var objectId: [String] = [String]()

然后我可以使用单元格的indexPath从上面的数组中获取相关信息。

每个单元格还有一个UIButton(用于投票以及其他信息)。

Like so...

要获取单击了哪个单元格的indexPath,我使用:

    let btnPos: CGPoint = sender.convert(CGPoint.zero, to: self.tableView)
    let indexPath = self.tableView.indexPathForRow(at: btnPos)!
    let rowToAction = indexPath.first!
  

作为旁注,objectAtIndexPath(rowToAction)似乎在Swift 3中不起作用,有没有人知道另一种选择?

从这一点来说,我不太了解更新Parse表的得分属性的最有效方法。

在查看Parse文档后,我可能会使用计数器变量来保存分数或数组。

尽管如此,我认为如果在多个用户尝试在任何给定时间访问数据的情况下使用计数器可能存在同步问题。 (不确定)

是否有人可以分享他们执行此类任务的方式,以便Parse的数据只能由1位用户在任何给定时间访问,以避免此类问题。

1 个答案:

答案 0 :(得分:0)

所以你想增加numberOfUpVotes

您可以使用

[post incrementKey:@"numberOfUpVotes"];
[post saveInBackground];

这将异步更新投票,incrementKey方法是原子的。假设我们有5位用户点击" up"按钮同时,键值#34; numberOfUpVotes"将是5而不是1。

此外,您可以通过以下方式指定增量:

[post incrementKey:@"numberOfUpVotes" byAmount:[NSNumber numberWithInt:2]]

但我不认为这会在你的用例中发生:)

你可以从Parse阅读这篇文章:

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

或者你可以看到我的问题:

iOS Parse.com updating objects

  

注意:我的代码在Objective-C中,但转换它很容易   进入斯威夫特。