【问题标题】:Custom multiple UIImagePicker using Firebase使用 Firebase 自定义多个 UIImagePicker
【发布时间】:2017-11-23 08:01:19
【问题描述】:

我有一个图像数组var images: NSArray! = [],它使用自定义 UIImagePicker 最多收集五个图像。我需要将图像发送到 Firebase,但 Firebase 不接受数组,所以我将数组的每个索引都变成了它自己的 UIImage:

let imageOne = images[0] as? UIImage
let imageTwo = images[1] as? UIImage
let imageThree = images[2] as? UIImage
let imageFour = images[3] as? UIImage
let imageFive = images[4] as? UIImage

然后我创建了一个将图像发送到 firebase 的函数:

func uploadImage(image: UIImage){
    var randomName = randomStringWithLength(length: 5)
    let imageData = UIImageJPEGRepresentation(imageOne!, 1.0)
    let imageDatas = UIImageJPEGRepresentation(imageTwo!, 1.0)
    let imageDataThree = UIImageJPEGRepresentation(imageThree!, 1.0)
    let imageDataFour = UIImageJPEGRepresentation(imageFour!, 1.0)
    let imageDataFive = UIImageJPEGRepresentation(imageFive!, 1.0)


    let uploadRef = FIRStorage.storage().reference().child("images/\(randomName).jpg")
    guard let ImageData = imageData else { return }
    uploadRef.put(ImageData, metadata: nil) { metadata,
        error in
        if error == nil {
            print("successfully uploaded Image")

            self.imageFileName = "\(randomName as String).jpg"

            randomName = randomStringWithLength(length: 5)


            let uploadRef2 = FIRStorage.storage().reference().child("images/\(randomName).jpg")
            guard let Imagedatas = imageDatas else { return }
            uploadRef2.put(Imagedatas, metadata: nil) { metadata,
                error in
                if error == nil {
                    self.imageFileNameTwo = "\(randomName as String).jpg"
                } else{
                    print("Error uploading image")
                }
                randomName = randomStringWithLength(length: 5)


                let uploadRef3 = FIRStorage.storage().reference().child("images/\(randomName).jpg")
                guard let imageDataThrees = imageDataThree else { return }
                uploadRef3.put(imageDataThrees, metadata: nil) { metadata,
                    error in
                    if error == nil {
                        self.imageFileNameThree = "\(randomName as String).jpg"
                    } else{
                        print("Error uploading image")
                    }
                    randomName = randomStringWithLength(length: 5)


                    let uploadRef4 = FIRStorage.storage().reference().child("images/\(randomName).jpg")
                    guard let imageDataFours = imageDataFour else { return }
                    uploadRef4.put(imageDataFours, metadata: nil) { metadata,
                        error in
                        if error == nil {
                            self.imageFileNameFour = "\(randomName as String).jpg"
                        } else{
                            print("Error uploading image")
                        }

                        randomName = randomStringWithLength(length: 5)


                        let uploadRef5 = FIRStorage.storage().reference().child("images/\(randomName).jpg")
                        guard let imageDataFives = imageDataFive else { return }
                        uploadRef5.put(imageDataFives, metadata: nil) { metadata,
                            error in
                            if error == nil {
                                AppDelegate.instance().dismissActivityIndicator()
                                self.imageFileNameFive = "\(randomName as String).jpg"
                            } else{
                                print("Error uploading image")
                            }

            let postObject: Dictionary<String, Any> = [

                "image" : self.imageFileName,
                "imageTwo" : self.imageFileNameTwo,
                "imageThree" : self.imageFileNameThree,
                "imageFour" : self.imageFileNameFour,
                "imageFive" : self.imageFileNameFive,


            ]

            FIRDatabase.database().reference().child("posts").child(self.loggedInUser!.uid).child(key).setValue(postObject)
          }}}}} else{
            print("Error uploading image")

        }}



}


if let pickedImageFirst = imageOne,
let pickedImageSecond = imageTwo,
let pickedImageThird = imageThree,
let pickedImageFour = imageFour,
let pickedImageFive = imageFive {
uploadImage(image: pickedImageFirst)

此功能要求用户始终使用 5 张图片,否则会崩溃。但是,我希望它是可选的。以便用户可以在一张或五张图像之间进行选择。现在,如果我选择的图片少于 5 张,我就会崩溃:

由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:' -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

【问题讨论】:

    标签: arrays swift firebase firebase-realtime-database firebase-storage


    【解决方案1】:

    您可以使用guard 语句,而不是在一个地方强制展开所有图像。

    guard let imageData = imageData else { return }
    uploadRef.put(imageData, metadata: nil) { metadata,
        error in
        if error == nil {
            print("successfully uploaded Image")
    
            self.imageFileName = "\(randomName as String).jpg"
    
            randomName = randomStringWithLength(length: 5)
            let uploadRef2 = FIRStorage.storage().reference().child("images/\(randomName).jpg")
    
            guard let imageDatas = imageDatas else { return }
            uploadRef2.put(imageDatas, metadata: nil) { metadata
    

    通过你的函数等等。

    【讨论】:

    • 当我这样做时,我在警卫上得到一个错误 let imageData = imageData else { return } line "use of unresolved identifier 'imageData'
    • 您需要提供更多代码。这里没有人是读心者。试图帮助您的人假定您已经定义了 imageData,因为您在代码中引用了它。
    • @Mozahler imageData 已定义 我将其包含在我的原始问题中 let imageData = UIImageJPEGRepresentation(imageOne!, 1.0)
    • @thexande 我已经为此工作了数周,但似乎找不到解决方案。请如果你能帮助我。当我执行您给定的解决方案时,它说我重新声明了 imageData 但是当我删除我的 let imageData = UIImageJPEGRepresentation(imageOne!, 1.0) 它说 imageData 没有声明
    • 将 guard let 声明更改为另一个名称,例如 guard let image = imageData
    猜你喜欢
    • 2013-12-24
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多