gpt4 book ai didi

arrays - 从 Parse 获取的数据未保存在数组中 - Swift 2.0

转载 作者:行者123 更新时间:2023-11-28 08:54:42 25 4
gpt4 key购买 nike

我正在使用 Parse,并希望下载图像以供离线使用。我知道本地数据存储无法做到这一点,因此我决定将它们添加到核心数据中。

我已成功下载 PFFiles 并将它们放入数组中。然后我尝试为 NSData 创建一个数组,但是当我使用下面的代码时数组计数始终为 0

class DealsDownloadViewController: UIViewController {
@IBOutlet weak var imageView: UIImageView!

var trailID = [Int]()
var trailStep = [Int]()
var dealNumber = [Int]()
var imageFile = [PFFile]()
var imagesArray = [UIImage]()
var imageDataArray = [NSData]()
var number = 0

override func viewDidLoad() {
super.viewDidLoad()


let appDel: AppDelegate = UIApplication.sharedApplication().delegate as! AppDelegate

let context: NSManagedObjectContext = appDel.managedObjectContext


let dealsQuery = PFQuery(className: ("Deals"))
dealsQuery.orderByAscending("TrailId")

dealsQuery.findObjectsInBackgroundWithBlock { (objects, error) -> Void in
if let objects = objects {

for object in objects {


self.trailID.append(object["TrailID"] as! Int)
self.trailStep.append(object["TrailStep"] as! Int)
self.dealNumber.append(object["dealNumber"] as! Int)
self.imageFile.append(object["dealImage"] as! PFFile!)


}

for file in self.imageFile {

let dealImage = file
dealImage.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in

if error == nil {

let image = UIImage(data: imageData!)
self.imageDataArray.append(imageData!)
self.imagesArray.append(image!)

} else {print("error here")}

})

print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)
}





} else {print("problem making arrays")}


}

}

Log from the original code

如果我向上移动 Print 语句,我只会让它打印循环的每次迭代。

for file in self.imageFile {

let dealImage = file
dealImage.getDataInBackgroundWithBlock({ (imageData: NSData?, error: NSError?) -> Void in

if error == nil {

let image = UIImage(data: imageData!)
self.imageDataArray.append(imageData!)
self.imagesArray.append(image!)

} else {print("error here")}

print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)

})


}


} else {print("problem making arrays")}


}

}

Log from second code

在这种情况下,我可以看到数据已添加到 imagesArray 和 imageDataArray。

这似乎是一个如此简单的问题,但我为之疯狂。我做错了什么,这是将此数据添加到核心数据的最有效方法吗?我是否忽略了一些明显的东西?

我是编程新手,所以请指出我犯的任何错误,而且我作为 stackoverflow 的提问者特别新(在学习过程中你是不可或缺的)所以如果你需要我所拥有的任何信息,请告诉我错过了。

感谢您的帮助。

更新 1

我已经尝试按照评论中的解释编辑代码,但我仍然得到相同的结果。我已经在这段代码上移动了 Print 语句,它仍然给我与上面相同的结果。

for file in self.imageFile {

let dealImage = file

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

if error == nil {

weak var aBlockSelf = self

let image = UIImage(data: imageData!)
aBlockSelf!.imageDataArray.append(imageData!)
self.imagesArray.append(image!)

}

print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)

})

}

} else {print("problem making arrays")}

}

}

我是不是漏掉了一些非常简单的东西?再次感谢您的帮助。

更新 2

这与(我认为)将打印语句移出 For 循环的代码相同。这从打印语句中给出了 9,9,9,0,0 的计数,而我认为我应该期待 9,9,9,9,9。

for file in self.imageFile {

let dealImage = file

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

if error == nil {

weak var aBlockSelf = self

let image = UIImage(data: imageData!)
aBlockSelf!.imageDataArray.append(imageData!)
self.imagesArray.append(image!)

}

})

}

print(self.trailID.count)
print(self.trailStep.count)
print(self.dealNumber.count)
print(self.imageDataArray.count)
print(self.imagesArray.count)

} else {print("problem making arrays")}

}

}

最佳答案

这里没有问题!

您被异步 block 的工作方式所欺骗。异步 block 排队等候在下一个运行循环的某个时间点执行。

您的第一个打印语句就在您将代码传递给尚未执行的 block 之后。这就是为什么您看到图像数组为空的原因。

关于arrays - 从 Parse 获取的数据未保存在数组中 - Swift 2.0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33406010/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com