我正在制作一个涉及图片视图的应用,用户首次登录时会将照片上传为他们的照片,如下所示:

let storage = FIRStorage.storage()

        let storageRef = storage.referenceForURL("gs:xxxxxxxxxxxxxxxx")
        let picRef = storageRef.child("images/" + "myname" + ".jpg")
        let data = UIImagePNGRepresentation(pickedImage)
        forceUpload(profPicRef, data: data!)

    let uploadTask = picRef.putData(data, metadata: nil) { metadata, error in
        if (error != nil) {
            print(error)
        } else {
            print("uploaded")
            // Metadata contains file metadata such as size, content-type, and download URL.
            let downloadURL = metadata!.downloadURL
        }
    }
}

然后下次他们回到这个视图控制器时,在ViewDidAppear中我有这个代码,应该下载图片并将其放入图片View:

picRef.dataWithMaxSize(1 * 4096 * 4096) { (data, error) -> Void in
        print("in download")
        if (error != nil) {
            print(error)
        } else {
            retPic = UIImage(data: data!)!

然后我将retPic设置为图像视图的图像 . 问题是,这些方法似乎是随机调用的 . 当我第一次进入此视图控制器时,图像视图中不会出现图像,并且不会打印“下载” . 此外,当我上传图片时,并不总是上传,并且“上传”并不总是打印 . 在来回切换到此视图控制器之后,它最终似乎随机加载 . 我想知道为什么这些putData和dataWithMaxSize函数在看似随机的时间被调用,以及如何在我想要它们时强制它们发生 . 我也有这个问题与快照,并将它们移动到ViewWillAppear似乎工作,但不是在这里 .

谢谢!