从Parse.com获取数据到自定义单元格(swift)

时间:2015-08-16 17:21:14

标签: ios swift parse-platform

我正在尝试将数据从parse.com提取到我的自定义单元格中,该单元格中充满了字符串和图像。我相信我要么从parse.com中错误地检索我的PFFile,要么我正在正确地检索PFFile但是不正确地将文件转换为UIImage。我收到的错误是在loadData()函数中进行的。它的内容如下:找不到接受提供的参数的'init'的重载

信息

//Used to set custom cell
class Information {
    var partyName = ""
    var promoterName = ""
    var partyCost = ""
    var flyerImage: UIImage
    var promoterImage: UIImage

    init(partyName: String, promoterName: String, partyCost: String, flyerImage: UIImage, promoterImage: UIImage) {
        self.partyName = partyName
        self.promoterName = promoterName
        self.partyCost = partyCost
        self.flyerImage = flyerImage
        self.promoterImage = promoterImage
    }
}

解析功能

func loadData() {
    var findDataParse:PFQuery = PFQuery(className: "flyerDataFetch")
    findDataParse.findObjectsInBackgroundWithBlock{
        (objects: [AnyObject]?, error: NSError?) -> Void in
        if (error == nil) {
            for object in objects! {
                var eventImage0 : UIImage
                var eventImage10 : UIImage
                let userImageFile = object["partyFlyerImage"] as! PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    if error == nil {
                        let eventImage = UIImage(data:imageData!)
                        eventImage0 = eventImage!
                    }
                }
                let userImageFile1 = object["partyPromoterImage"] as! PFFile
                userImageFile1.getDataInBackgroundWithBlock {
                    (imageData1: NSData?, error1: NSError?) -> Void in
                    if error1 == nil {
                        let eventImage1 = UIImage(data:imageData1!)
                        eventImage10 = eventImage1!
                    }
                }
//Error below
                var party1 =  Information(partyName: (object["partyName"] as? String)!, promoterName: (object["partyPromoterName"] as? String)!,partyCost: (object["partyCost"] as? String)!, flyerImage: UIImage(data: eventImage0)!, promoterImage: UIImage(data: eventImage10)!)

                self.arrayOfParties.append(party1)
            }
        }
        self.tableView.reloadData()

    }
}

2 个答案:

答案 0 :(得分:1)

您在后台从Parse获取数据,但在主线程上处理。试试这个:

func loadData() {
    var findDataParse:PFQuery = PFQuery(className: "flyerDataFetch")
    findDataParse.findObjectsInBackgroundWithBlock{
    (objects: [AnyObject]?, error: NSError?) -> Void in
        if (error == nil) {
            for object in objects! {
                var eventImage0 : UIImage
                var eventImage10 : UIImage
                let userImageFile = object["partyFlyerImage"] as! PFFile
                userImageFile.getDataInBackgroundWithBlock {
                    (imageData: NSData?, error: NSError?) -> Void in
                    if error == nil {
                        let eventImage = UIImage(data:imageData!)
                        eventImage0 = eventImage!
                        let userImageFile1 = object["partyPromoterImage"] as! PFFile
                        userImageFile1.getDataInBackgroundWithBlock {
                            (imageData1: NSData?, error1: NSError?) -> Void in
                            if error1 == nil {
                                let eventImage1 = UIImage(data:imageData1!)
                                eventImage10 = eventImage1!

                                var party1 =  Information(partyName: (object["partyName"] as? String)!, promoterName: (object["partyPromoterName"] as? String)!, partyCost: (object["partyCost"] as? String)!, flyerImage: UIImage(data: eventImage0)!, promoterImage: UIImage(data: eventImage10)!)

                                self.arrayOfParties.append(party1)
                            }
                        }
                    }
                }
            }
        }
        self.tableView.reloadData()

    }
}

答案 1 :(得分:0)

异步获取图像并同步创建信息单元格。因此,当您创建单元格时,图像可能未加载,并且您实际上将nil发送给单元格的构造函数。

在以下代码中,您将检索图像数据异步:

userImageFile.getDataInBackgroundWithBlock {
                (imageData: NSData?, error: NSError?) -> Void in
                if error == nil {
                    let eventImage = UIImage(data:imageData!)
                    eventImage0 = eventImage!
                }
            }

因此,当您将图像数据分配给eventImage0时,可能已经发生了对Information cell初始化程序的调用。

您需要修改代码而不是将图像传递到单元格视图初始化程序,允许您从信息单元格访问UIImageview,这样当背景图像加载完成后,您只需将加载的图像设置为该UI / PF / ImageView的。