OGeek|极客世界-中国程序员成长平台

标题: ios - 所有用户都可以访问和更改的最有效的数据存储方式 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 17:49
标题: ios - 所有用户都可以访问和更改的最有效的数据存储方式

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

所以我有一个 TableView Controller ,它通过查询 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!

As a side note, objectAtIndexPath(rowToAction) does not seem to work in Swift 3, does anyone know of an alternative?

从这一点来看,我有点不确定更新 Parse 表的 score 属性的最有效方法。

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

不过,我认为在多个用户试图在任何给定时间访问数据的情况下,使用计数器是否可能存在同步问题。 (不确定)

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



Best Answer-推荐答案


所以你想增加 numberOfUpVotes

你可以使用

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

这将异步更新投票,并且 incrementKey 方法是原子的。假设我们有 5 个用户同时点击“向上”按钮,则键“numberOfUpVotes”的值将是 5 而不是 1。

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

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

但我认为这不会在您的用例中发生

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

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

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

iOS Parse.com updating objects

note: my code is in Objective-C, but it's pretty easy to convert that into Swift.

关于ios - 所有用户都可以访问和更改的最有效的数据存储方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40023328/






欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://ogeek.cn/) Powered by Discuz! X3.4