ViewOneとViewTwoの2つのビューがあります。iOS Swiftを使用してFirebase Storageに画像の配列を1パス下に保存する方法
ViewOneには、4つのimageViewアウトレットとpostButtonがあります。ユーザがpostButtonを押すと、すべての画像がFirebase Storageに送信され、そこからViewTwoに表示されます。
内部ビューViewOneからFirebase Storageに投稿された画像を受信する4つのImageViewアウトレットも2つあります。
Firebase Storageを使用するストレージ内に複数の画像をすべて同じパスの下に保存することはできません。 1つの画像につき1つの画像をStorageに保存してアクセスする方法を理解していますが、複数の画像ではありません。
1つのパス(ViewOne)の下に保管するために、複数の画像をストレージに配列として投稿するにはどうすればよいですか?どのようにそれらの画像(ViewTwo)にアクセスするのですか?
はところで私は、YouTube経由でブライアンVoongからviewTwoための素晴らしいコード(カスタム関数)を得た: https://youtu.be/b1vrjt7Nvb0これは画像のURL文字列が入りますクラスです。私はinitを入れても構いませんでした。
class ImageData: NSObject{
var imageOneURL: String?
var imageTwoURL: String?
var imageThreeURL: String?
var imageFourURL: String?
}
これはimageViewOneです。私はImagePickerデリゲートを追加しませんでした。なぜなら、これは不要だと思われたからです。
import Firebase
ImageViewOne:UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate{
@IBOutlet weak var imageViewONE: UIImageView!
@IBOutlet weak var imageViewTWO: UIImageView!
@IBOutlet weak var imageViewTHREE: UIImageView!
@IBOutlet weak var imageViewFOUR: UIImageView!
var images = [ImageData]()
@IBAction func postButton(sender: UIButton){
//Unigue string for the images to be loaded under their own path
let uniqueImageIDPath = NSUUID().UUIDString
//Firebase Storage Ref
let storageRef = FIRStorage.storage().reference().child("images/\(uniqueImageIDPath)")
//Firebase Image to be stored. This is where I need help to store all the images at once.
if let myImages = UIImageJPEGRepresentation(self.imageViewONE.image!, 0.1){
storageRef.putData(myImages, metadata: nil, completion: {
(metadata, error) in
if error != nil{
print(error?.localizedDescription)
}
if let myImageString = metadata?.downloadURL()?.absoluteString{
let imageData = ImageData()
imageData.imageOne = myImageString
self.images.apped(imageData)
let values = ["imageOneURL": imageData.imageOne, "imageTwo":"?", "imageThree":"?", "imageFour":"?"]
let ref = FIRDatabase.database().reference().child("users")
ref.updateChildValues(values, withCompletionBlock: {
(error, user) in
if error != nil{
print(error?.localizedDescription)
}
})
}
}
}
これは、それはFirebaseは、あなたが何かの配列を格納せませんになりますviewTwo
import Firebase
ViewTwo: UIViewController{
@IBOutlet weak var imageViewONE: UIImageView!
@IBOutlet weak var imageViewTWO: UIImageView!
@IBOutlet weak var imageViewTHREE: UIImageView!
@IBOutlet weak var imageViewFOUR: UIImageView!
var imageOne: UIImage?
var imageTwo: UIImage?
var imageThree: UIImage?
var imageFour: UIImage?
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let ref = FIRDatabase.database().reference().child("users")
ref.observeEventType(.ChildAdded, withBlock: {
(snapshot) in
if let dict = snapshot.value as? [String: AnyObject]{
let imageURLStr = dict["imageOneURL"] as? String
self.loadImageUsingCacheWithURLString(imageURLStr)
}
}
//Custom Function
func loadImageUsingCacheWithURLString(urlString: String){
let url = NSURL(string: urlString)
NSURLSession.sharedSession().dataTaskWithURL(url!, completionHandler: {
(data, response, error) in
if error != nil {
print(error?.localizedDescription)
return
}
dispatch_async(dispatch_get_main_queue(), {
if let displayImage = UIImage(data: data!){
self.imageOne = displayImage!
self.imageViewOne.image = self.imageOne
}
})
}).resume()
}
}