Sur*_*raj 0 ios parse-platform 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
}
Run Code Online (Sandbox Code Playgroud)
我的Parse Class细节
班级名称 - 图像

当我运行这个函数时,它在控制台中没有消息就崩溃了.
注意:我能够在回调中获得PFFile对象的集合.
我用"var imageData = thumbNail.getData()var image = UIImage(data:imageData)"替换了"thumbNail.getDataInBackgroundWithBlock({...."块与同步函数调用thumbNail.getData()
然后错误说
警告:正在主线程上执行长时间运行的操作.打破warnBlockingOperationOnMainThread()进行调试.
所以,我恢复了thumbNail.getDataInBackGroundWithBloack({...但是现在,控制台中没有错误显示,因为它发生在我之前.我的方法有什么问题请告诉我.任何帮助将不胜感激... !
我设法重新创建了错误,这似乎是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
}
Run Code Online (Sandbox Code Playgroud)
编辑:顺便说一句,这也有效:
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
}
Run Code Online (Sandbox Code Playgroud)
这表明错误是由以下行引起的:
for object : PFObject! in objects as [PFObject] {
Run Code Online (Sandbox Code Playgroud)
重写该行如下:
for object : PFObject in objects as [PFObject] {
Run Code Online (Sandbox Code Playgroud)
同时删除错误.所以这个错误的原因似乎是你告诉程序解开一些不可选的东西.
| 归档时间: |
|
| 查看次数: |
5137 次 |
| 最近记录: |