2017-04-15 10 views
0

私はyoutubeのいくつかのスウィフト3つのコースを習っています。私が書いたコードは、ユーザアカウントを作成し、Firebaseデータベースに詳細を保存するためのコードです。テストの際、私は登録フォームを提出する時点まで進めることができます。私は、次のエラーが表示されますタイプが未知の画像フォーマットを作成するとエラーです... Swift3

[Generic] Creating an image format with an unknown type is an error. 
Fatal Error: unexpectedly found nil whilst unwrapping an Optionional value. 

私も下の行には、以下のコードブロックで強調表示があった:

以下
exc_bad_instruction(code=exc_i386_invop subcode=0x0) 

は私のコードです。例外がスローされる場所を強調表示しました。どんな援助も高く評価されるだろう。

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
if let image = info[UIImagePickerControllerEditedImage] as? UIImage { 
    self.imgView.image = image // Checks image selected exists 
    nextBtn.isHidden = false // Unhides "Next" button once image has been picked 
} 
self.dismiss(animated: true, completion: nil) 

}

このいずれかを使用。..

/// what app will do when user choose & complete the selection image : 
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 

    /// chcek if you can return edited image that user choose it if user already edit it(crop it), return it as image 
    if let editedImage = info[UIImagePickerControllerEditedImage] as? UIImage { 

     /// if user update it and already got it , just return it to 'self.imgView.image' 
     self.imgView.image = editedImage 

     /// else if you could't find the edited image that means user select original image same is it without editing . 
    } else if let orginalImage = info[UIImagePickerControllerOriginalImage] as? UIImage { 

     /// if user update it and already got it , just return it to 'self.imgView.image'. 
     self.imgView.image = orginalImage 
    } 
     else { print ("error") } 

    /// if the request successfully done just dismiss 
    picker.dismiss(animated: true, completion: nil) 

} 

そして、このエラーのため:代わりにあなたのコードの

import UIKit 
import Firebase 

class Signup_ViewController: UIViewController, 
UIImagePickerControllerDelegate, UINavigationControllerDelegate { 

// Input data fields for signup form 
@IBOutlet weak var usernameField: UITextField! 
@IBOutlet weak var emailField: UITextField! 
@IBOutlet weak var nameField: UITextField! 

// Password data field for signup form 
@IBOutlet weak var passwordField: UITextField! 
@IBOutlet weak var confirmPasswordField: UITextField! 

// Next button for signup form (Hidden by default) 
@IBOutlet weak var nextBtn: UIButton! 

let picker = UIImagePickerController() 
var userStorage: FIRStorageReference! 
var ref: FIRDatabaseReference! 

override func viewDidLoad() { 
    super.viewDidLoad() 
    picker.delegate = self 

    let storage = FIRStorage.storage().reference(forURL: "XXXXXXXXXXXXXXXXXXXX") // Defines URL for Firebase storage container 

    ref = FIRDatabase.database().reference() 
    userStorage = storage.child("users") // Folder on Firebase storage 
} 

// Image for signup form - user profile image 
@IBOutlet weak var imgView: UIImageView! 

// Action for when user presses the "Select profile picture" button 
@IBAction func selectProfileImagePress(_ sender: Any) { 

    picker.allowsEditing = true // Enables user to edit photo 
    picker.sourceType = .photoLibrary // Enables user to pick photo from photo library 

    present(picker, animated: true, completion: nil) 
} 

func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    if let image = info[UIImagePickerControllerEditedImage] as? UIImage { 
     self.imgView.image = image // Checks image selected exists 
     nextBtn.isHidden = false // Unhides "Next" button once image has been picked 
    } 
    self.dismiss(animated: true, completion: nil) 
} 
// Action for when the "Next" button is pressed 
@IBAction func nextPressed(_ sender: Any) { 
    guard usernameField.text != "", nameField.text != "", emailField.text != "", passwordField.text != "", confirmPasswordField.text != "" else { return } 
    if passwordField.text == confirmPasswordField.text { // Checks password and confirm password match <---- Error highlights this line when the app crashes out. 
      FIRAuth.auth()?.createUser(withEmail: emailField.text!, password: passwordField.text!, completion: { (user, error) in 
      if let error = error { 
       print(error.localizedDescription) 
      } 

      if let user = user { 

       let changeRequest = FIRAuth.auth()!.currentUser!.profileChangeRequest() 
       changeRequest.displayName = self.nameField.text! 
       changeRequest.commitChanges(completion: nil) 

       let imageRef = self.userStorage.child("\(user.uid).jpg") // Creates JPG file for user uploading (user.uid is variable for specific user) 

       let data = UIImageJPEGRepresentation(self.imgView.image!, 0.5) // Prepares user profile picture to be sent to Firebase. Applies 0.5 compression to image. 

       let uploadTask = imageRef.put(data!, metadata: nil, completion: { (metadata, err) in 
        if err != nil { 
         print(err!.localizedDescription) 
        } 

        imageRef.downloadURL(completion: { (url, er) in 
         if er != nil { 
          print(er!.localizedDescription) 
         } 

         if let url = url { 
          let userInfo: [String : Any] = ["uid" : user.uid, 
                  "username" : self.usernameField.text!, 
                  "name" : self.nameField.text!, 
                  "urltoImage" : url.absoluteString] 

         self.ref.child("users").child(user.uid).setValue(userInfo) 

          let vc = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "userVC") 

          self.present(vc, animated: true, completion: nil) 
         } 
        }) 
       }) 
       uploadTask.resume() 
      } 
      }) 

     } else { 
     print ("Password does not match") 
     } 
} 
} 
+1

passwordFieldとconfirmPasswordFieldの両方がストーリーボードに正しく接続されていることを確認しましたか?これは、その行の '予期せぬ発見のnil'エラーを説明します。私は '画像を作成しています...'というエラーにはコメントできません - それは私にとって初めてのことです。 –

+0

こんにちは、私はconfirmPasswordFieldをチェックし、再リンクしました。それでもエラーが発生します。私は、イメージの作成エラーを解決しました。 – IainW

+0

パスワードフィールド?同じ行に同じ予期せず見つかったnilエラーがまだ出ますか?その行には2つのオプションしかなく、そのうちの1つはゼロです。つまり、エラーがあなたに伝えているものです。 –

答えて

5

Creating an image format with an unknown type is an error…Swift3

xcodeのバグです。ピッカーが画像を適切に選択して返すことができれば、すべてが問題ないことを意味し、無視するだけです。

+0

こんにちは、これは間違いなく私の問題の一つを解決しました。今私は最初のポスターのコメントで解決されることを願っています。 ご協力いただきありがとうございます。 – IainW

+0

それを見てうれしいです。 "これはxcodeのバグです。ピッカーが画像を適切に選択して返すことができれば、すべてが問題ないことを意味し、無視するだけです。" –

関連する問題