4

I have previously been retrieving an image form my Parse backend to display in my app inside a UIImageView using the following lines of code:

let userPicture = PFUser.currentUser()["picture"] as PFFile

userPicture.getDataInBackgroundWithBlock { (imageData:NSData, error:NSError) -> Void in
    if (error == nil) {

            self.dpImage.image = UIImage(data:imageData)

    }
}

But I get the error:

'AnyObject?' is not convertible to 'PFFile'; did you mean to use 'as!' to force downcast?

The 'helpful' Apple fix-it tip suggests the "as!" change so I add in the !, but then I get the error:

'AnyObject?' is not convertible to 'PFFile'

With the 'getDataInBackgroundWithBlock' section, I also get the error:

Cannot invoke 'getDataInBackgroundWithBlock' with an argument list of type '((NSData, NSError) -> Void)'

Can someone please explain how to correctly retrieve a photo from Parse and display it in a UIImageView using Swift 1.2?

1 Answer 1

10

PFUser.currentUser() returns optional type (Self?). So you should unwrap return value to access element by subscript.

PFUser.currentUser()?["picture"]

And the value got by subscript is also optional type. So you should use optional binding to cast the value because type casting may fail.

if let userPicture = PFUser.currentUser()?["picture"] as? PFFile {

And parameters of the result block of getDataInBackgroundWithBlock() method are both optional type (NSData? and NSError?). So you should specify optional type for the parameters, instead NSData and NSError.

userPicture.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in

The code modified the all above problems is below:

if let userPicture = PFUser.currentUser()?["picture"] as? PFFile {
    userPicture.getDataInBackgroundWithBlock { (imageData: NSData?, error: NSError?) -> Void in
        if (error == nil) {
            self.dpImage.image = UIImage(data:imageData)
        }
    }
}
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks so much! If I had enough reputations I would upvote this! Only error Xcode gave me with this was to suggest I use a '!' mark after imageData like so: self.dpImage.image = UIImage(data: imageData!). Once I did that change, it worked perfectly.
I can't make it work in swift2.1, it's returning nil.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.