1

我正在 Swift 中构建一种热门或非风格的应用程序,用户可以在其中投票:分别在图像上投票:HOT、NOT 和 MAYBE。

每次用户访问图像时,他们都会投票,然后对于每个投票,IBAction 都会触发一个查询,该查询显示来自 Parse 的总票数和总热点数的结果,如下面的代码所示。

我计划有 1,000 张图像。

我可以预加载与每个图像对应的所有 objectID,然后当用户对图像进行投票时,数据已经从解析中预加载/查询了吗?我该怎么办?

现在,我正在为每个 ObjectID 编写一个查询,该查询将从 1000 个不同的图像中获取 1000 个查询……显然不可扩展。

swipePosition 变量只是一个计数器,用于计算用户在哪个图像上。存储的图像现在存储在 Xcode 上的数组中。如果它们存储在 Parse 上,也许它们也可以预加载?

(我只展示了“hotButtonQuery”函数,但还有一个 Not 和 Maybe buttonQuery 函数......)

有没有办法简化这段代码以使其具有可扩展性?因为到目前为止,我无法缩放超过 25 张图像......

非常感谢!

func hotButtonQuery() {
    if swipePosition == 0 {
        var query = PFQuery(className:"UserData")
        query.getObjectInBackgroundWithId("RlvK3GhfqE") {
            (userData: PFObject!, error: NSError!) -> Void in
            if error != nil {

                println(error)
            }

            else {
            userData.incrementKey("totalVotes", byAmount: 1)
            userData.incrementKey("hot", byAmount: 1)

                var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger

                var updateHotsUILabel = userData.objectForKey("hot") as NSInteger

                userData.saveInBackground()

                println("parse was updated!")

                self.totalVotesLabel.text = String(updateTotalVotesUILabel)
                self.totalHotsLabel.text = String(updateHotsUILabel)
            }
        }
    } else if swipePosition == 1 {
            var query = PFQuery(className:"UserData")
            query.getObjectInBackgroundWithId("30WlVtgurP") {
                (userData: PFObject!, error: NSError!) -> Void in
                if error != nil {

                    println(error)
                }

                else {
                    userData.incrementKey("totalVotes", byAmount: 1)
                    userData.incrementKey("hot", byAmount: 1)


                    var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger

                    var updateHotsUILabel = userData.objectForKey("hot") as NSInteger

                    //println(userData.objectForKey("totalVotes"))
                    //println("total HOTs:")
                    //println(userData.objectForKey("hot"))

                    userData.saveInBackground()

                    println("parse was updated!")


                    self.totalVotesLabel.text = String(updateTotalVotesUILabel)
                    self.totalHotsLabel.text = String(updateHotsUILabel)


                }
            }
    } else if swipePosition == 3 {
        var query = PFQuery(className:"UserData")
        query.getObjectInBackgroundWithId("5D6ARjk3xS") {
            (userData: PFObject!, error: NSError!) -> Void in
            if error != nil {

                println(error)
            }

            else {
                userData.incrementKey("totalVotes", byAmount: 1)
                userData.incrementKey("hot", byAmount: 1)


                var updateTotalVotesUILabel = userData.objectForKey("totalVotes") as NSInteger

                var updateHotsUILabel = userData.objectForKey("hot") as NSInteger

                //println(userData.objectForKey("totalVotes"))
                //println("total HOTs:")
                //println(userData.objectForKey("hot"))

                userData.saveInBackground()

                println("parse was updated!")


                self.totalVotesLabel.text = String(updateTotalVotesUILabel)
                self.totalHotsLabel.text = String(updateHotsUILabel)


            }
        }
    }
4

1 回答 1

0

恭敬地,我建议重新考虑你的整个方法。不要将 objectIds 存储在您的代码中。不要一遍又一遍地重复本质上相同的代码块。把事情简单化:

  1. 检索和显示图像
  2. 捕获投票并保存对象
  3. 查询下一个对象并重复过程

如果你想减少查询的数量,以 10 个左右的批次抓取。加载所有内容没有意义,因为用户不太可能点击全部 1000 个。

唯一需要弄清楚的是你将如何跟踪用户已经投票的图像。您可以在客户端或 Parse 中执行此操作。有一些不错的方法。

于 2015-02-27T20:44:42.523 回答