Hi,
Completion handler did work for me in a different case, but here I am facing the same issue again and completion handler is not giving the expected result.
Since I am new to Swift I am not sure if I have implemented it correctly.
Here I am trying to download images based on a list of names from Firestore, and then adding them to a resource group.
I am expecting when the statement trackedImages = trackedImages.union(self.newReferenceImages) executes, newReferenceImages should have the downloaded images.
But it gets executed before the downloading is completed.
Please help.
func downloadArResources(listOfImages imageList: [String] ){
if !imageList.isEmpty {
for imageName in imageList {
print("Image working on: \(imageName)")
downloadAndAddToSet(name: imageName){
if var trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: Bundle.main){
trackedImages = trackedImages.union(self.newReferenceImages)
print("new Bundle images = \(trackedImages.description)")
}
}
}
}
}
func downloadAndAddToSet(name imageName: String, completion: @escaping () -> Void){
let FIRImageName = self.root.child("MagicFrame/\(self.userName)/images/\(imageName).jpg")
FIRImageName.getData(maxSize: 5 * 1024 * 1024) { data, error in
if let error = error {
print("Error in downloading image: \(error)")
} else {
if let image = UIImage(data: data!){
if let cgimage = image.cgImage {
let newImage = ARReferenceImage(cgimage, orientation: .up, physicalWidth: 0.2)
newImage.name = imageName
self.newReferenceImages.insert(newImage)
}
}
}
}
completion()
}
Topic:
App & System Services
SubTopic:
Processes & Concurrency
Tags: