Swift Image retrieving from Parse sdk - getting crashed

前端 未结 1 983
Happy的楠姐
Happy的楠姐 2020-12-18 17:16

I\'m retrieving set of images from Parse, using the following code using Swift.

var imageResources : Array = []
override func viewDidLoad(){
          


        
相关标签:
1条回答
  • 2020-12-18 17:35

    I managed to recreate the error, which seems to be some kind of memory leak / zombie on a PFObject. I'm not sure exactly why, but refactoring your code in the following manner got rid of the error in my case:

    func loadImages() {
    
        var query = PFQuery(className: "Images")
        query.orderByDescending("objectId")
    
    
        query.findObjectsInBackgroundWithBlock ({(objects:[AnyObject]!, error: NSError!) in
            if(error == nil){
    
                self.getImageData(objects as [PFObject])
    
            }
            else{
                println("Error in retrieving \(error)")
            }
    
        })//findObjectsInBackgroundWithblock - end
    
    
    }
    
    func getImageData(objects: [PFObject]) {
        for object in objects {
    
            let thumbNail = object["image"] as PFFile
    
            println(thumbNail)
    
            thumbNail.getDataInBackgroundWithBlock({
                (imageData: NSData!, error: NSError!) -> Void in
                if (error == nil) {
                    let image = UIImage(data:imageData)
                    //image object implementation
                    self.imageResources.append(image)
                    println(image)
                }
    
            })//getDataInBackgroundWithBlock - end
    
        }//for - end
    }
    

    EDIT: Incidentally, this also works:

    func loadImages() {
    
        var query = PFQuery(className: "Images")
        query.orderByDescending("objectId")
    
    
        query.findObjectsInBackgroundWithBlock ({(objects:[AnyObject]!, error: NSError!) in
            if(error == nil){
    
                let imageObjects = objects as [PFObject]
    
                for object in objects {
    
                    let thumbNail = object["image"] as PFFile
    
                    thumbNail.getDataInBackgroundWithBlock({
                        (imageData: NSData!, error: NSError!) -> Void in
                        if (error == nil) {
                            let image = UIImage(data:imageData)
                            //image object implementation
                            self.imageResources.append(image)
                            println(image)
                        }
    
                    })//getDataInBackgroundWithBlock - end
    
                }//for - end
    
            }
            else{
                println("Error in retrieving \(error)")
            }
    
        })//findObjectsInBackgroundWithblock - end
    
    
    }
    

    This would indicate that the error was due to the following line:

    for object : PFObject! in objects as [PFObject] {
    

    Rewriting that line as follows:

    for object : PFObject in objects as [PFObject] {
    

    Also removes the error. So the reason for this error seems to be that that you told the program to unwrap something that wasn't an optional.

    0 讨论(0)
提交回复
热议问题