ios - iOS 中使用 parse.com 的帖子评分系统 - 赞成/反对

标签 ios swift parse-platform

简单:我想要帖子(或图片)的评级系统与 Yik Yak 或 9gag 中的效果相同 - 用户只能对帖子投赞成票或反对票 。我不想将这些数据存储在设备上,而是将所有数据存储在 parse.com 上。我还想统计评论。理想情况下,只需对 parse.com 进行一次查询即可完成所有操作

我当前正在使用此代码,但我认为这不是执行此操作的好方法,因为对于每个图像,它都会创建一个新查询。目前,我在 Parse.com 用户、图像、评论、评级中有 4 个表,所有内容都与指向图像或用户的指针相关。

func loadData(){
    forPaginationStart = 0
    numberOfImagesPerPage = 5
    imageData.removeAllObjects()
    var findImageData: PFQuery = PFQuery(className: "Image")
    findImageData.whereKey("deleted", equalTo: 0)
    findImageData.orderByDescending("createdAt")
    findImageData.skip = forPaginationStart
    findImageData.limit = numberOfImagesPerPage
    findImageData.findObjectsInBackgroundWithBlock{
        (objects:[AnyObject]?, error:NSError?)->Void in

        if error == nil{
            for object in objects! {

                let image:PFObject = object as! PFObject
                self.imageData.addObject(image)

                //comment counts
                var countComments = PFQuery(className:"Comment_image")
                countComments.whereKey("image_id", equalTo: PFObject(withoutDataWithClassName: "Image", objectId: "\(image.objectId!)"))
                countComments.whereKey("deleted", equalTo: 0)
                countComments.countObjectsInBackgroundWithBlock {
                    (count: Int32, error: NSError?) -> Void in
                    if error == nil {
                        println("There is \(count) comments for image: \((object.objectId!)!)")
                        self.commentCount.append(countComments.countObjects())
                    }
                }
            }

            self.tableView.reloadData()

        }

    }

    //count number of records in DB for pagination end
    var totalNumOfRows: PFQuery = PFQuery(className: "Image")
    totalNumOfRows.whereKey("deleted", equalTo: 0)
    totalNumOfRows.countObjectsInBackgroundWithBlock {
        (count: Int32, error: NSError?) -> Void in
        if (error == nil) {
            self.totalNumRecords = Int(count)
            println("total records: \(self.totalNumRecords)")
        }


    }
}

我让它与 php 和 SQL 一起工作,但对于解析,相同的方法对我不起作用...我问数据库该用户的值(value)是什么,如果是 1,则用户投赞成票,如果是负值,则他投反对票, 0 都不是,我根据值设置按钮 SQL查询:

IFNULL((SELECT value FROM rating WHERE image.id = rating.image_id AND rating.user_id = (SELECT id FROM user WHERE uuid='$uuid')), 0) as UserRating

最佳答案

- (instancetype)whereKey:(NSString *)key matchesKey:(NSString *)otherKey inQuery:(PFQuery *)query

您可以使用this method on PFQuery ,例如:

var countComments = PFQuery(className:"Comment_image")
var findImageData: PFQuery = PFQuery(className: "Image")
findImageData.whereKey("deleted", equalTo: 0)
findImageData.orderByDescending("createdAt")
findImageData.skip = forPaginationStart
findImageData.limit = numberOfImagesPerPage
countComments.whereKey("image_id", matchesKey:"objectId", inQuery: )
countComments.whereKey("deleted", equalTo: 0)
countComments.countObjectsInBackgroundWithBlock {
    (count: Int32, error: NSError?) -> Void in
     if error == nil {
         println("There is \(count) comments for all images!")
     }
}

通过像这样设置计数查询,您不必为每个图像调用计数,但我不知道在后台 Parse 是否进行优化以使其比当前查询更快。

关于ios - iOS 中使用 parse.com 的帖子评分系统 - 赞成/反对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30946105/

相关文章:

javascript - Parse - 经过特定时间后运行云函数

iOS:了解 UIView 上的开始动画和动画结束

ios - iOS 中的中文字体渲染

ios - 使用增强现实录制视频的最佳方式是什么

android - 如何在 android 中使用解析 api 在解析服务器中上传图像

javascript - 将文件上传到 Parse (Javascript)

ios - UIViewController 背景图像跨越导航栏后面?

ios - Swift:如何计算居中字符串的大小

ios - 没有这样的文件或目录,但文件存在 Xcode

ios - 为什么 swift 函数这么贵?