javascript - 在 uitableview 单元格中显示项目的评分

标签 javascript ios xml json parse-platform

我目前正在开发一个 iOS 应用程序,该应用程序在 UITableView 中显示 30 个菜单项,然后用户可以在用户点击单元格时显示的详细信息页面上对这些项目进行 5 次评分。

现在单元格中只有项目的标题,现在我想要做的是拥有项目的标题和当前的平均值。标题下方项目的评级。现在我知道如何创建单元格,但我无法有效地获取电影的当前评分数据。

我目前使用 Parse.com 作为我的后端。现在,当用户提交评分时,它会保存到我在 Parse 上名为 Ratings 的类(class)。并保存项目的标题和给定的星数。

现在我正在尝试想出最有效的方法来获取项目的平均星数并将其放入 UITableViewCell 中。首先,我考虑只执行一个云代码函数来查询所有 30 个项目,并平均评分,就像在 parse.com 文档中所做的那样 https://parse.com/docs/cloud_code_guide#functions .

这里的问题是有 30 个或更多的项目,然后每个查询都使用一个 API 请求,然后很快就上升了。所以我已经排除了那个选项。另一种方法是一次只显示 5 个项目,然后在用户向下滚动时加载下一个 5 个项目,但用户通常会非常快速地滚动多个项目,并且仍会查看菜单上的所有 30 个项目,所以这并不能解决我的问题。

现在我也有自己的服务器,目前我在其中存储了一些正在提供服务的项目。我在想是否有办法制作一个 xml 文件或 JSON,当用户保存一个项目时,我将它保存到 Parse。然后也保存这个文件。

所以这就是我的想法以及我卡住的地方。我会使用 Parse.com Javascript SDK 创建一个 Cloud Code Job,它会每天运行一次。我会让这个函数执行一个查询,以检索在最后一天保存到我的评级类中的所有评级。这会给我所有的对象。现在这就是我遇到的问题:如何从 Parse.com SDK 将这个文件放到我的服务器上,以及如何将新评级保存到这个文件中?

当然,我愿意接受所有其他关于如何解决这个问题并尽量减少我的 API 请求的建议。我在考虑是否也可以使用 Parse.com 托管来托管 xml 或 JSON 文件?

或者只是一种完全不同的方式,我没有提到。

我知道这是一个很长的问题,我已经尽力解释了,如果您有任何问题,请提出。

提前感谢您的帮助。我真的很感激:)

编辑

我忘了提的是,这些元素每天都在变化,而且我有多家餐厅,每家都有自己的元素,所以它是 30 * # 家餐厅。因此,当我在 TableView 中显示 30 个项目时,我不确定如何在两个查询中获得所有评级(使用额外的类,我是否仍然需要查询每个项目)?

编辑 2

好吧,现在我有一个 NSMutableArray 填充了评级,我从查询中返回。但是假设我的 TableView 中有项目“一”、“二”和“三”。并且只有“一个”和“三个”被评级,然后我得到这些项目的两个评级,如果在我的 cellForRowAtIndexPath: 方法中,我只是这样做。类似

cell.rating = ratingsArray[indexRow.path];

那么项目二的评分应该是三分...

你看到问题了吗?我该如何解决?

谢谢

最佳答案

您不需要 Cloud Code Jobs 或其他任何东西。您可以简单地创建另一个具有这些属性的类:itemIdnumberOfVotesaverageRating。当用户发布新评分时,在他的设备上执行以下操作:

averageRating = (averageRating*numberOfVotes + userVote) / (numberOfVotes+1)
numberOfVotes++

并将这两个值存储在云端。当您需要显示平均评分时,只需获取项目的 averageRating 值即可。

编辑

当我说到额外的类(class)时,我的意思是您不需要将每个评分都存储在云端。您可以只使用一个类别,并且只存储每个项目的平均评分和投票数。您可以通过调用 query 来获取多个项目的平均评分像那样:

NSArray *ids = @[@"1",
                 @"2",
                 @"3"];
[query whereKey:@"itemId" containedIn:ids];

如果你想存储每个用户的评分(检查用户是否已经对特定项目投票或在另一台设备上显示他的评分),你可以将它们存储在 iCloud 容器中,这样你只需要一个 API 调用当用户投票时,当用户获取 30(或任意数量)的项目时调用。

如果您不需要支持 iOS 7 及更低版本,您也可以考虑使用 CloudKit 而不是 Parse。

关于javascript - 在 uitableview 单元格中显示项目的评分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27476359/

相关文章:

javascript - knockout JS foreach 遍历对象数组

javascript - 将类添加到单选按钮

ios - cellForRow 返回 nil - swift 3

javascript - 有人可以帮我一些逻辑吗?

javascript - knockout : pass a value from controller to view and then pass it from view to viewmodel

javascript - 如何获取输入字段的更新值?

ios - Rails Search 无法在 Heroku 的移动设备上运行

ios - 如何将用户的当前位置与其他位置进行比较并显示在 UITableView 中?

MySQL 使用 ExtractValue(XML, 'Value/Values' ) 获取所有多个值(将一列拆分为多行)

xml - XML 模式中的 ref 和 type 有什么区别?