使用Firebase自定义多个UIImagePicker [英] Custom multiple UIImagePicker using Firebase
问题描述
我有一个图像数组 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()。dismissActivityIndicator()
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]'
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屋!