2017-11-10 9 views
0

私はprepareforSegueスウィフト3から

によって第二UIViewControllelerに私のコードを第一UIViewControllerから画像を渡すためにしようとしています1つのViewControllerからの画像を渡すことができません: -

extension ViewController:UIImagePickerControllerDelegate,UINavigationControllerDelegate { 
func handleImg() { 
    let picker = UIImagePickerController() 
    picker.delegate = self 
    picker.allowsEditing = true 
    present(picker, animated: true, completion: nil) 
} 
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [String : Any]) { 
    var selectedImageFromPicer : UIImage? 
    if let editedImage = info["UIImagePickerControllerEditedImage"] as? UIImage { 
     selectedImageFromPicer = editedImage 
    } else if let originalImage = info["UIImagePickerControllerOriginalImage"] as? UIImage { 

     selectedImageFromPicer = originalImage 
    } 

    if let selectedImage = selectedImageFromPicer { 
     imgg.image = selectedImage 
    } 
    guard let imageUrl = info["UIImagePickerControllerImageURL"] as? URL else { 
     return 
    } 
    self.performSegue(withIdentifier: "selected", sender: self) 
    func imagePickerControllerDidCancel(_ picker: UIImagePickerController) { 
     print("canceled picker") 
     dismiss(animated: true, completion: nil) 
    } 
} 
override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "selected" { 
     let vc = segue.destination as! secondVC 
     vc.img.image = self.imgg.image 

    } 
} 

私はエラーを取得していますライン上のvc.img.image = self.imgg.image

エラー

fatal error: unexpectedly found nil while unwrapping an Optional value

+0

httpsに

とのviewDidLoad()内var image: UIImage? = nil設定した画像を宣言する変更します/stackoverflow.com/questions/31576232/passing-image-to-another-view- controller-swift、およびnilではないデータを検証します。if-letを使用してnil値を処理できます。 –

+0

"select"という名前のストーリーボード内のsegueと、( "secondVC"というコードで)デスティネーションビューコントローラのタイプを確認してください。 vcがゼロである可能性があります。 – Eridana

+0

代わりにvc.img = self.imggを試してください – YinKiet

答えて

0

ますself.imgg.imageが原因でそのエラーが発生しています。それは、このように空にされていないときにだけimggを設定している:

if let selectedImage = selectedImageFromPicer { 
    imgg.image = selectedImage 
} 

が、このコードが実行されることはありませんならば、それは予想外にnilを見つけ、エラーがスローされますどのような。

ですから、二VCのためにそれを設定しているとき、最初のチェックがnullでないし、このようにそれを設定した場合:

vc.img.image = self.imgg.image 
+0

は理解できません –

+0

この行のsecondvcに割り当てる前に、 vc.img.image = self.imgg.image ' –

0

はタイプUIImageのsecondVCにし、中にあなたの最初のViewControllerセット画像から変数を作成します。その変数

secondVCのビューがまだメモリに作成されていないため、この例外が発生しています。 /:

のでFirstVCで次のように変更

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "selected" { 
     let vc = segue.destination as! secondVC 
     vc.image = self.imgg.image 

    } 
} 

を適用secondVCに適用される次は

はImageViewの

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.img.image = image 
} 
+0

これは動作しません –

+0

これを実装した後も同じ例外が発生していますか? – Priya

+0

画像が2番目のvcに表示されない –