2017-06-20 69 views
0

我有一個圖像數組var images: NSArray! = [],它使用自定義UIImagePicker最多收集5個圖像。我需要將圖片發送到火力地堡,但所以我把數組的每個索引到自己的UIImage火力地堡不接受數組:使用Firebase自定義多個UIImagePicker

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 

然後我創建了一個功能來發送圖像到火力點:

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] '

回答

0

您可以使用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 

等通過你的功能。

+0

當我這樣做時,我得到了一個警衛讓我們imageData = imageData其他{返回}行「使用未解析的標識符'imageData' – juelizabeth

+1

您需要提供更多的代碼,這裏沒有人是心靈讀者。試圖幫助你假設你已經定義了imageData,因爲你在你的代碼中引用它。 – Mozahler

+0

@Mozahler imageData被定義我把它包含在我原來的問題中'let imageData = UIImageJPEGRepresentation(imageOne !, 1.0)' – juelizabeth