尝试使用 Swift 从 Parse 显示图像时出现问题

Posted

技术标签:

【中文标题】尝试使用 Swift 从 Parse 显示图像时出现问题【英文标题】:Problems When Trying to display images from Parse using Swift 【发布时间】:2015-06-16 17:34:01 【问题描述】:

我正在尝试使用 swift 显示来自解析的图像。这是我的代码:

var query = PFQuery(className: "Maps")
            query.getObjectInBackgroundWithId("1234asdf3456") 
                (object: PFObject?, error: NSError?) -> Void in
                if error == nil
                
                    println(object)
                    var objectAsPF = object as PFObject!
                    let file = objectAsPF["imageFile"] as! PFFile
                    file.getDataInBackgroundWithBlock 
                        (imageData:NSData?, error:NSError?) -> Void in
                        if error == nil 
                            if let imageData = imageData 
                                let map:UIImage = UIImage(data: imageData)!
                                self.MapView.image = map
                                println("success")
                            
                           
                    

                
                else
                
                    println(error)
                
            

我在 println("success") 处设置了一个断点,并检查了变量值,一切都很好,直到我尝试将 imageData 转换为 UIImage。有什么建议吗?

【问题讨论】:

错误是什么,您要在哪里转换? 删除这一行 'if let imageData = imageData' 和那一行的 。 没有错误,图像根本没有出现在屏幕上。 MapView 是一个图像视图,我尝试使用 UIImage(数据:imageData)将 NSData 转换为 UIImage。当我在代码中设置断点时,我看到 NSData 不是 nil,但图像是 nil。 【参考方案1】:

使用此代码从解析中检索图像,然后将其从 PFFile 转换为 UIImage...

var query = PFQuery(className:"Maps")
    
query.findObjectsInBackgroundWithBlock 
                (objects: [AnyObject]?, error: NSError?) -> Void in
                
                if error == nil 
                    // The find succeeded.
                    self.scored = objects!.count
                    // Do something with the found objects
                    if let objects = objects as? [PFObject] 
                        for object in objects 
                            let userImageFile = object["imageFile"] as! PFFile
                            userImageFile.getDataInBackgroundWithBlock 
                                (imageData: NSData?, error: NSError?) -> Void in
                                if error == nil 
                                    if let imageData = imageData 
                                        let image = UIImage(data:imageData)
                                        
                                    if image != nil 
                                        self.imageArray.append(image!)
                                    
                                    
                                    
                                
                            
                        
                    
                 else 
                    // Log details of the failure
                    println("Error: \(error!) \(error!.userInfo!)")
                
                
                dispatch_async(dispatch_get_main_queue()) 
                    
                println("Finished Loading Image")
            

【讨论】:

您好,只是关于此代码的几个问题。 self.scored 的目的是什么?另外 dispatch_async(dispatch_get_main_queue()) 的目的是什么 另外,当我运行此代码时,我得到一个致命错误:在展开可选值时意外发现 nil

以上是关于尝试使用 Swift 从 Parse 显示图像时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

Swift 2.0:需要在 Parse 的 PFQueryTableViewController 上显示图像(PFFile)?

使用 Swift 从 Parse 中检索图像

使用 getdatainbackground 从 Parse 检索多个图像(IOS - Swift)

使用 Swift 和 Parse 获取 Facebook UserData 时出现致命错误

在 Swift 中显示来自 Parse 的图像

Swift 无法从 parse.com 检索图像