从parsingsdk中获取Swift图像 – 崩溃

我从Parse中检索一组图像,使用下面的代码使用Swift。

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

我的parsing类的细节

class级名称 – 图像 解析类架构

当我运行这个函数时,它在控制台中没有消息而崩溃。

注意:我可以在callback中获得PFFile对象的集合。

我已经用“var imageData = thumbNail.getData()var image = UIImage(data:imageData)”代替了“thumbNail.getDataInBackgroundWithBlock({…”)块与同步函数调用thumbNail.getData()

然后错误说

警告:主线程正在执行长时间运行的操作。 断开warnBlockingOperationOnMainThread()进行debugging。

所以,我还原为thumbNail.getDataInBackGroundWithBloack({…但现在,没有错误显示在控制台,因为它发生之前有没有什么错误的方法,请让我知道任何帮助将不胜感激… !

我设法重新创build一个错误,这似乎是PFObject上的某种内存泄漏/僵尸。 我不确定为什么,但以下面的方式重构你的代码摆脱了我的情况的错误:

 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 } 

编辑:顺便说一句,这也适用:

 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 } 

这将表明该错误是由于以下行:

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

重写该行如下:

 for object : PFObject in objects as [PFObject] { 

也删除错误。 所以这个错误的原因似乎是,你告诉程序打开一些不是可选的东西。