2016-08-23 11 views
0

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() 
    } 
} 

答えて

0

です。各イメージのメタデータURLを取得したら、それぞれをFBDatabaseとFBStorageに個別に保存する必要があります。

関連する問題