Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从firebase storage Swift 4 ios检索图像_Ios_Swift_Database_Firebase_Storage - Fatal编程技术网

如何从firebase storage Swift 4 ios检索图像

如何从firebase storage Swift 4 ios检索图像,ios,swift,database,firebase,storage,Ios,Swift,Database,Firebase,Storage,我正在尝试从firebase存储中检索图像,但由于某些原因,我检索的图像始终为nil var ref: DatabaseReference! var storageRef: StorageReference! var hallData = [Hall]() override func viewDidLoad() { let refHandle = Database.database().reference().child("hallData").observe(DataEventType

我正在尝试从firebase存储中检索图像,但由于某些原因,我检索的图像始终为
nil

var ref: DatabaseReference!
var storageRef: StorageReference!
var hallData = [Hall]()
override func viewDidLoad() {
    let refHandle = Database.database().reference().child("hallData").observe(DataEventType.value, with: { (snapshot) in
        let postDict = snapshot.value as? [String : AnyObject] ?? [:]
         let values = Array(postDict.values)
        //print(values)
        let valueDict = values as! [[String:Any]]

        for i in valueDict
        {
            var name = i["name"] as! String
            var address = i["address"] as! String
            var capacity = i["capacity"] as! String
            var decorations = i["decorations"] as! String
            var highPrice = i["highPrice"] as! String
            var lowPrice = i["lowPrice"] as! String
            var catering = i["catering"] as! String
            var email = i["email"] as! String
            self.storageRef = Storage.storage().reference().child("images").child(email)
            var image: UIImage!
            // Download in memory with a maximum allowed size of 1MB (1 * 1024 * 1024 bytes)

            self.storageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in

                if let error = error {
                    print("PLASESEE")
                    print(error.localizedDescription)
                    // Uh-oh, an error occurred!
                } else {
                    // Data for "images/island.jpg" is returned
                    let image = UIImage(data: data!)
                }
            }
        print(image)
            self.hallData.append(Hall(name2: name, capacity2: capacity, lowPrice2: lowPrice, highPrice2: highPrice, catering2: catering,decorations2: decorations, address2:address, image2: image, email2: email))
        }
    })
}

我不明白我做错了什么,我遵循了firebase存储上的api,查阅了很多教程,但我一直得到
nil

问题是您试图在getData闭包之外使用image var

    self.storageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
            if let error = error {
                print("PLASESEE")
                print(error.localizedDescription)
                // Uh-oh, an error occurred!
            } else {
                // Data for "images/island.jpg" is returned
                let image = UIImage(data: data!)
            } <- closure ends here and image is only valid above this
        }
        print(image) <- image may not be populated at this point
        self.hallData.append... image
    }

如果这样做,前面的
var-image:UIImage可以删除,因为它没有函数。否则,请在闭包中删除let before let image=。

问题是您试图在getData闭包之外使用image变量

    self.storageRef.getData(maxSize: 1 * 1024 * 1024) { data, error in
            if let error = error {
                print("PLASESEE")
                print(error.localizedDescription)
                // Uh-oh, an error occurred!
            } else {
                // Data for "images/island.jpg" is returned
                let image = UIImage(data: data!)
            } <- closure ends here and image is only valid above this
        }
        print(image) <- image may not be populated at this point
        self.hallData.append... image
    }

如果这样做,前面的
var-image:UIImage可以删除,因为它没有函数。否则,请在闭包内删除let-before-let image=。

嗨,鲍勃。首先,请不要使用大写的单词。@Vyacheslav哦,谢谢你,但是你能给我一个答案吗?你是有错误还是island.png的图像为nil?你创建了一个带有“var image:UIImage!”的图像容器变量。您创建了一个同名的新变量,而不是将图像从getData设置为它。这就是为什么你什么地方都不去抓。另一个问题是var被分配到哪里——在闭包之外。嗨,鲍勃。首先,请不要使用大写的单词。@Vyacheslav哦,谢谢你,但是你能给我一个答案吗?你是有错误还是island.png的图像为nil?你创建了一个带有“var image:UIImage!”的图像容器变量。您创建了一个同名的新变量,而不是将图像从getData设置为它。这就是为什么你什么地方都不去抓。另一个问题是分配var的位置-在闭包之外。