2017-07-02 9 views
1

ユーザーが画像をアップロードしてアカウントを作成しようとしています。しかし、画像が選択された後、ユーザは「アカウントを作成」を選択することになっている。しかし、プログラムは中断され、それ以降は何もしません。次に、このメッセージはコンパイラで '不明なタイプの画像フォーマットを作成するとエラーが画像をアップロードできませんでした'というメッセージが表示されます。タイプが不明な画像フォーマットを作成すると、画像をアップロードできませんでした。 Swift

ここにコードがあります。

import UIKit 
import Firebase 
import FirebaseDatabase 
import FirebaseStorage 
import SwiftKeychainWrapper 

class SignUpVC: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

@IBOutlet weak var userImagePicker: UIImageView! 
@IBOutlet weak var usernameField: UITextField! 
@IBOutlet weak var signUpBtn: UIButton! 

var userUid: String! 
var emailField: String! 
var passwordField: String! 
var imagePicker: UIImagePickerController! 
var imageSelected = false 
var username: String! 




override func viewDidLoad() { 
    super.viewDidLoad() 

    imagePicker = UIImagePickerController() 
    imagePicker.delegate = self 
    imagePicker.allowsEditing = true 
} 

override func viewDidDisappear(_ animated: Bool) { 

    if let _ = KeychainWrapper.standard.string(forKey: "uid") { 
     performSegue(withIdentifier: "toMessage", sender: nil) 
    } 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    if let image = info[UIImagePickerControllerEditedImage] as? UIImage { 
     userImagePicker.image = image 
     imageSelected = true 

    } else { 

     print("image wasnt selected") 
    } 
    imagePicker.dismiss(animated: true, completion: nil) 
} 

func setUser(img: String) { 
    let userData = [ 
    "username": username!, 
    "userImg": img 
    ] 

    KeychainWrapper.standard.set(userUid, forKey: "uid") 

    let location = Database.database().reference().child("users").child(userUid) 

    location.setValue(userData) 
     dismiss(animated: true, completion: nil) 

} 
func uploadImg() { 
    if usernameField.text == nil { 
     signUpBtn.isEnabled = false 
    } else { 
      username = usernameField.text 
      signUpBtn.isEnabled = true 
    } 
    guard let img = userImagePicker.image, imageSelected == true else { 
     print("image needs to be selected") 
     return 
    } 
    if let imgData = UIImageJPEGRepresentation(img, 0.2) { 
     let imgUid = NSUUID().uuidString 
     let metadata = StorageMetadata() 
     metadata.contentType = "image/jpeg" 

     Storage.storage().reference().child(imgUid).putData(imgData, metadata: metadata) { (metadata, error) in 
      if error != nil { 
       print ("did not upload image") 
      } else { 
       print("uploaded") 
       let downloadURL = metadata?.downloadURL()?.absoluteString 
       if let url = downloadURL { 
        self.setUser(img: url) 
       } 
      } 
     } 
    } 
} 

@IBAction func createAccount (_ sender: AnyObject) { 
    Auth.auth().createUser(withEmail: emailField, password: passwordField, completion: {(user, error) in 
     if error != nil { 
      print("Cant create user") 
     } else { 
      if let user = user { 
       self.userUid = user.uid 
      } 
     } 
     self.uploadImg() 

    }) 
} 

@IBAction func selectedImgPicker (_ sender: AnyObject) { 
    present(imagePicker, animated: true, completion: nil) 
} 

@IBAction func cancel (_ sender: AnyObject) { 
    dismiss(animated: true, completion: nil) 
} 
} 

申し訳ありませんが、これはあまりにも大きいですが、私はXcodeがエラーとしてそれを表示していないため、このエラーをどこにピンポイントするか正確にはわかりません。ソリューションがどこかにあるかのようですが、hereが見つかりましたが、問題が見つかっています。前もって感謝します。

答えて

0

availableMediaTypesを使用すると、有効な画像タイプのみが表示されます。

 let type = kUTTypeImage as String 
     let imagePicker = UIImagePickerController() 

     if UIImagePickerController.isSourceTypeAvailable(.camera) {     
      if let availableTypes = UIImagePickerController.availableMediaTypes(for: .camera) {      
       if availableTypes.contains(type) {       
        imagePicker.mediaTypes = [type] 
        imagePicker.sourceType = UIImagePickerControllerSourceType.camera 
       } 
      } 
     } else { 
      return 
     } 

     imagePicker.allowsEditing = true 
     imagePicker.showsCameraControls = true 
     imagePicker.delegate = self 

その後もUIImagePickerControllerOriginalImage

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

     if let image = info[UIImagePickerControllerOriginalImage] as? UIImage ?? info[UIImagePickerControllerEditedImage] as? UIImage { 
      userImagePicker.image = image 
      imageSelected = true 
     } else { 
      print("image wasnt selected") 
     } 
     imagePicker.dismiss(animated: true, completion: nil) 
    } 
+0

をチェックするかもしれない、私は「文字列としてましょうタイプは= kUTTypeImage」のビルドエラーを取得しています –

+0

私がいる問題は、firebase更新の可能性が高いです。私が探している解決策は、それと関係があるかもしれません。 –

関連する問題