使用Firebase自定义多个UIImagePicker [英] Custom multiple UIImagePicker using Firebase

查看:367
本文介绍了使用Firebase自定义多个UIImagePicker的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个图像数组 var images:NSArray! = [] ,用一个自定义的UIImagePicker收集最多五个图像。我需要将图像发送到Firebase,但Firebase不接受数组,因此我将数组的每个索引转换为它自己的UIImage:

 <$ c $让imageOne = images [0]为? UIImage 
让imageTwo = images [1]为? UIImage
让imageThree = images [2]为? UIImage
让imageFour = images [3]为? UIImage
让imageFive = images [4]为? 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)
(ImageData,元数据:nil){元数据,
错误
if error ==零{
print(成功上传的图像)

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

randomNameName = randomStringWithLength(length:5)

$ b let uploadRef2 = FIRStorage.storage()。reference()。child(images / \(randomName).jpg)$ b $如果错误== nil {
self.imageFileNameTwo(
$ upload
$ upload
$ upload
$ upload $ =\(randomName as String).jpg
} else {
print(Error upload upload image)
}
randomName = randomStringWithLength(length:5)

$ b $ uploadRef3 = FIRStorage.storage()。reference()。child(images / \(randomName).jpg)
guard let imageDataThrees = imageDataThree else {return}
uploadRef3.put(imageDataThrees,元数据:nil){元数据,
错误
if error == nil {
self.imageFileNameThree =\(randomName as String).jpg
} else {
print(Error upload upload image)
}
randomName = randomStringWithLength (长度:5)


let uploadRef4 = FIRStorage.storage()。reference()。child(images / \(randomName).jpg)
guard imageDataFours = imageDataFour else {return} $ b $ uploadRef4.put(imageDataFours,metadata:nil){metadata,
error in
if error == nil {
self.imageFileNameFour =\\ \\(随机名作为字符串).jpg
其他{
print(Error upload upload image)
}

randomName = randomStringWithLength(length:5)


let image uploadFile = imageDataFive else {return} $ b $ uploadRef5.put(imageDataFives,如果错误== nil {
AppDelegate.instance()。dismissActivityIndi​​cator()
self.imageFileNameFive =\(randomName as字符串).jpg
else {
print(Error upload upload image)
}

let postObject:Dictionary< String,Any> = [

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



$ b FIRDatabase.database()。reference()。child( (错误上传图片)
()())。child(self.loggedInUser!.uid).child(key).setValue(postObject)
}}}}} else {
print
}}


$ b}


如果让pickImageFirst = 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]'

解决方案 c> guard 语句,而不是强制在一个地方展开所有图像。

  guard let imageData = imageData else {return} 
uploadRef.put(imageData,metadata:nil){metadata,如果错误== 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 imageDatas = imageDatas else {return}
uploadRef2.put(imageDatas,metadata:nil){metadata

等等通过你的函数。

I have an image array var images: NSArray! = [] that collects a max of five images with a custom UIImagePicker. I need to send the images to Firebase, but Firebase does not accept arrays so I turned each index of the array into its own 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

Then I created a function to send the images to 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)

This function requires the user to always 5 images otherwise it crashes. However, I want it to be optional. So that a user can select between one or five images. Right now if I select less than 5 images, I get this crash:

Terminating app due to uncaught exception 'NSRangeException', reason: ' -[__NSSingleObjectArrayI objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

解决方案

You could use guard statements instead of force unwrapping all you images in one place.

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

And so on through your function.

这篇关于使用Firebase自定义多个UIImagePicker的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆