Parse 中的 UITableView,索引不正确

UITableView in Parse, not indexing properly

全部, 我在解析后端有一个简单的 class - 它提供了一个 uitableview。数据存储在数组中。我猜是因为所有解析数据都是在后台完成的,所以有时数据会先于其他数据下载。我有一个非常混乱的表格视图。图像在错误的单元格中等。此外,自定义单元格有时根本不显示,我需要刷新。

这是我用来从解析中下载所有数据并添加到数组中的代码。

能否请您看一下并建议一种方法。

还有我如何在原始图像出现之前添加占位符图像。 此代码也在我的 ViewDidLoad 中,它在早期的函数中会更好吗,希望这样我就不必在 tableview 上 relsoaddata..

 var query = PFQuery(className:"TableViewData")
        query.includeKey("EventLoc")
        query.findObjectsInBackgroundWithBlock{
            (objects: [AnyObject]!, error: NSError!) -> Void in

            if error == nil {

                for object in objects {

                    let thumbNail = object["backgroundImage"] as PFFile

                  thumbNail.getDataInBackgroundWithBlock({
                        (imageData: NSData!, error: NSError!) -> Void in
                        if (error == nil) {
                                dispatch_async(dispatch_get_main_queue()) {
                            let image = UIImage(data:imageData)
                            self.CellBackgroundImage.append(image!)
                            }
                        }
                        })



                    var VenueLocation = object["EventLoc"] as PFObject!
                    VenueLocation.fetchIfNeededInBackgroundWithBlock {
                        (VenueLocation: PFObject!, error: NSError!) -> Void in
                        dispatch_async(dispatch_get_main_queue()) {
                        let VenueLocationTitle = VenueLocation["EventLocation"] as NSString
                        self.EventLocationArray.append(VenueLocationTitle)
                        }

                    }


                    let eventiconimage = object["EventIcon"] as PFFile
                    eventiconimage.getDataInBackgroundWithBlock({
                        (imageData: NSData!, error: NSError!) -> Void in
                        if (error == nil) {
                            dispatch_async(dispatch_get_main_queue()) {
                            let image = UIImage(data:imageData)
                            self.EventIconImageArray.append(image!)
                            }

                        }
                    })

                    dispatch_async(dispatch_get_main_queue()) {
                    self.TitleArray.append(object["EventTitle"] as String)
                    self.EventPriceArray.append(object["EventPrice"] as String)
                    self.EventStartDate.append(object["EventStartDate"] as NSDate)
                    self.EventEndDate.append(object["EventEndDate"] as NSDate)
                    self.tableView.reloadData()
                    }

您需要使用串行队列,这样您的数组数据才会有序。由于并发任务发生了什么数据未按顺序附加

var backgroundQueue:dispatch_queue_t =  dispatch_queue_create("SerialQueue", DISPATCH_QUEUE_SERIAL)

        var query = PFQuery(className:"TableViewData")
        query.includeKey("EventLoc")
        query.findObjectsInBackgroundWithBlock{
            (objects: [AnyObject]!, error: NSError!) -> Void in

            if error == nil {

                for object in objects {
             dispatch_async(backgroundQueue, { () -> () in


                    let thumbNail = object["backgroundImage"] as PFFile

                    thumbNail.getDataInBackgroundWithBlock({
                        (imageData: NSData!, error: NSError!) -> Void in
                        if (error == nil) {
                            dispatch_async(dispatch_get_main_queue()) {
                                let image = UIImage(data:imageData)
                                self.CellBackgroundImage.append(image!)
                            }
                        }
                    })



                    var VenueLocation = object["EventLoc"] as PFObject!
                    VenueLocation.fetchIfNeededInBackgroundWithBlock {
                        (VenueLocation: PFObject!, error: NSError!) -> Void in
                        dispatch_async(dispatch_get_main_queue()) {
                            let VenueLocationTitle = VenueLocation["EventLocation"] as NSString
                            self.EventLocationArray.append(VenueLocationTitle)
                        }

                    }


                    let eventiconimage = object["EventIcon"] as PFFile
                    eventiconimage.getDataInBackgroundWithBlock({
                        (imageData: NSData!, error: NSError!) -> Void in
                        if (error == nil) {
                            dispatch_async(dispatch_get_main_queue()) {
                                let image = UIImage(data:imageData)
                                self.EventIconImageArray.append(image!)
                            }

                        }
                    })

                    dispatch_async(dispatch_get_main_queue()) {
                        self.TitleArray.append(object["EventTitle"] as String)
                        self.EventPriceArray.append(object["EventPrice"] as String)
                        self.EventStartDate.append(object["EventStartDate"] as NSDate)
                        self.EventEndDate.append(object["EventEndDate"] as NSDate)
                        self.tableView.reloadData()
                    }

                });

                }
            }