【发布时间】:2020-07-09 16:53:06
【问题描述】:
我对这里的一些代码有一个小问题。我正在尝试使用五个名称、描述和图像填充集合视图。
我能够成功地将以上所有内容下载到他们尊重的数组中。
问题是我第一次执行 segue 时,图像数组中的值为零。然后我返回一个页面,重新进入该页面,发现所有的数组都填充成功了....
这真的很烦人。这是我的代码:
//arrays of names, descriptions and images
var names:[String] = []
var descriptions: [String] = []
var imagesArray: [UIImage] = []
这是我获取图像的地方:
func downloadImages(){
for x in 1...5{
let url = URL(string: "https://www.imagesLocation.com/(x).png")
let task = URLSession.shared.dataTask(with: url!){(data, response, error) in
guard
let data = data,
let newImage = UIImage(data: data)
else{
print("Could not load image from URL: ",url!)
return
}
DispatchQueue.main.async {
self.imagesArray.append(newImage)
}
}
task.resume()
}
loadDataFromFirebase()
}
我从这里下载名称和描述:
func loadDataFromFirebase() {
// Fetch and convert data
let db = Firestore.firestore()
db.collection(self.shopName).getDocuments { (snapshot, err) in
if let err = err {
print("Error getting documents: \(err)")
return
} else {
for document in snapshot!.documents {
let name = document.get("Name") as! String
let description = document.get("Description") as! String
self.names.append(name)
self.descriptions.append(description)
}
self.setupImages() //safe to do this here as the firebase data is valid
}
}
}
在这里我使用名称、描述和图像数组内容设置集合视图:
func setupImages(){
do {
if imagesArray.count < 5 || names.count < 5 || descriptions.count < 5 {
throw MyError.FoundNil("Something hasnt loaded")
}
self.pages = [
Page(imageName: imagesArray[0], headerText: names[0], bodyText: descriptions[0]),
Page(imageName: imagesArray[1], headerText: names[1], bodyText: descriptions[1]),
Page(imageName: imagesArray[2], headerText: names[2], bodyText: descriptions[2]),
Page(imageName: imagesArray[3], headerText: names[3], bodyText: descriptions[3]),
Page(imageName: imagesArray[4], headerText: names[4], bodyText: descriptions[4]),
]
}
catch {
print("Unexpected error: \(error).")
}
}
从下图中可以看出,除了 images 数组之外,每个数组都已成功填充:
这是上一页代码的转场:
DispatchQueue.main.async(){
self.performSegue(withIdentifier: "goToNext", sender: self)
}
欢迎任何帮助:)
【问题讨论】:
-
你在哪里调用这个函数?
-
我从 viewWillAppear 调用“downloadImages”函数
-
print("Could not load image from URL: ",url!)在调试中检查这一行 -
请先阅读异步执行。
-
找到零个匹配项。我认为他们下载成功,但添加到数组的速度不够快